2013-10-17 11 views
11

Mam formularz, który jest związany z podmiotem, ale ma także dodatkowy niemapowany murawę: (od klasy FormType)Wypełnij wstępnie wartość forma pola niezmapowanego

$builder 
    ->add('name') 
    ->add('qoh') 
    ->add('serialNumber', 'text', array('mapped' => false, 'required' => false)) 

Chcę pre- wypełnij pole serialNumber ze sterownika informacjami uzyskanymi z adresu URL żądania. Najbliższy sposób znalazłem to:

$form->setData(mixed $modelData)

ale API nie precyzuje, w jakiej formie „$ modelData” trwa i nic Próbowałem miał żadnego wpływu.

Odpowiedz

30

Ktoś na kanale IRC Symfony dał mi taką odpowiedź, a oni odmówili opublikować go tutaj:

$form->get('serialNumber')->setData($serial_number);

7

Możesz wstępnie wypełnić pole gałązką (Set default value of Symfony 2 form field in Twig).

... 

{{ form_widget(form.serialNumber, { value : serialNumber }) }} 

... 
+1

rację, ale wartość domyślna chcę nie jest statyczna, to wymaga pewnej logiki. Mogłem to zrobić w Twig, ale zrobienie tego w kontrolerze miałoby dla mnie większy sens. – Nelluk

5

Można użyć Form Events. Na przykład, jeśli chcesz ustawić dane z bazy danych do non polu odwzorowanym można wykorzystać POST_SET_DATA:

class AddNonMappedDataSubscriber implements EventSubscriberInterface 
{ 
protected $em; 

public function __construct(EntityManager $em) 
{ 
    $this->em = $em; 
} 

public static function getSubscribedEvents() 
{ 
    return array(
     FormEvents::POST_SET_DATA => 'postSetData' 
    ); 
} 

public function postSetData(FormEvent $event){ 
    $form = $event->getForm(); 
    $myEntity = $event->getData(); 

    if($myEntity){ 
     $serialNumber = $myEntity->getNumber(); 
     $form->get('serialNumber')->setData($serialNumber); 
     } 
    } 
} 
Powiązane problemy