2013-10-17 497 views
11

我有一個綁定到實體的形式,但它也有一個額外的映射的字段: (從FormType類)預填充表單值

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

我想預使用從請求URL獲取的信息填充控制器的serialNumber字段。我發現的最接近的方法是:

$form->setData(mixed $modelData)

但API沒有指定什麼樣的形式「$ modelData」需要並沒有什麼我已經試過有過任何影響。

回答

30

有人給了我這個答案,他們拒絕它張貼在這裏:

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

7

您可以預先填充樹枝中的字段(Set default value of Symfony 2 form field in Twig)。上的Symfony的IRC頻道

... 

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

... 
+1

權,但默認值我想也不是一成不變的,它需要一些邏輯。我可以在Twig中做到這一點,但在控制器中做這件事對我來說會更有意義。 – Nelluk

5

您可以使用Form Events。例如,如果你想從數據庫中的數據設置爲一個非映射字段,您可以使用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); 
     } 
    } 
}