2013-10-17 8 views
11

私はエンティティにバインドされたフォームを持っているが、それはまた、余分なマップされていないフィールドがあります。 (にformTypeクラスから)マップされていないフィールドの事前移入フォーム値

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

を私は事前にしたいですコントローラからのserialNumberフィールドに要求URLから取得した情報を入力します。私が見つけた最も近い方法は次のようになります。

$form->setData(mixed $modelData)

が、APIは、「$ modelDataが」取り、私が試したものは何も何の効果もなかったかの形式を指定しません。

答えて

30

symfonyのIRCチャンネルに誰かが私にこの答えを与えた、と彼らはそれをここに掲示を拒否した:

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

7

フィールドには、twig(Set default value of Symfony 2 form field in Twig)で事前入力することができます。

... 

{{ 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); 
     } 
    } 
} 
関連する問題