2012-05-11 41 views
17

jaki sposób można ustawić wartość domyślną w sonatowej administratora wiązki opcja danych brakuje w metodzie configureFormFieldsustawienie w Symfony2 sonatowej administratora wiązki

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('name', null, array('required' => true, 'data' => "my default value")) 
    ; 
} 

jak można użyć atrybutu danych, aby ustawić domyślną wartość pola wewnątrz ?? ?

+0

Co to jest typ pola dla nazwy? – Amit

Odpowiedz

41

Przypuszczam, prawdopodobnie już rozwiązany przez to teraz, ale jako odniesienie do nikogo innego można zastąpić metodę getNewInstance() i ustawić wartość domyślną na obiekcie:

public function getNewInstance() 
{ 
    $instance = parent::getNewInstance(); 
    $instance->setName('my default value'); 

    return $instance; 
} 
+0

Dokładnie tego, czego szukałem. Dzięki! – Matheno

+0

@RobMasters Co jeśli atrybut, który musimy wyświetlić, jest w rzeczywistości metodą? – smarber

4

można również przypisać domyślną wartość do właściwości podmiotu bezpośrednio:

class TheEntity 
{ 
    private $name = 'default name'; 
} 
+0

Dlaczego ta odpowiedź została odrzucona? Działa i wiąże się z najmniejszym nadpisaniem kodu dostawcy. Najlepsza odpowiedź imho. – FallenSquirrel

+0

@FallenSquirrel to działa, ale myślę, że to nie jest pożądane rozwiązanie, ponieważ OP prawdopodobnie chce, aby rozwiązanie zostało wykonane w Sonacie i nie chce dotykać właściwości klasy – GusDeCooL

5

Oprócz @RobMasters rozwiązania:

Jeśli chcesz ustawić relację można uzyskać odniesienie do pl titymanager (zamiast kompletnego obiektu):

public function getNewInstance() 
{ 
    $instance = parent::getNewInstance(); 

    if ($this->hasRequest()) { 
     $branch = $this->getRequest()->get('branch', null); 

     if ($branch !== null) { 
      $entityManager = $this->getModelManager()->getEntityManager('MyBundle\Entity\Branch'); 
      $branchReference = $entityManager->getReference('MyBundle\Entity\Branch', $branch); 

      $instance->setBranch($branchReference); 
     } 
    } 
    return $instance; 
} 

dodałem przykład do mojego bloga: http://blog.webdevilopers.net/populate-resp-set-default-values-on-form-resp-object-or-instance-in-sonataadminbundle/

+0

A co, jeśli 11 nie może być zakodowane? – aderuwe

+0

Gdzie byłby identyfikator lub resp. "11" pochodzi? – webDEVILopers

+0

Tak, moje pytanie dokładnie. – aderuwe

0

Dla logicznych, innym rozwiązaniem jest ustawienie wartości data ciągu pierwszej tablicy przekazany do metody add , wewnątrz configureFormFields

Więc po pewnym memtoring, mój kod (dla wyboru, że chciałem mieć domyślnie zaznaczone) skończyło się patrząc coś takiego:

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('name') 
     ->add('visible', null, ['label'=>'Visibility', 'data' => true ]) 
    ; 
} 

... co zapisało kilka wierszy u góry mojego pliku, ponieważ mogłem wtedy pozbyć się definicji getNewInstance().

Powiązane problemy