2016-08-29 5 views
2

私はform collectionを持っていて、field1の値に応じてフォームを送信した後にfield2に設定します。 field2はフォームでは編集できませんが、必須です。symfony 3:フォームを送信した後に値を設定

私はすべてのFormEvent(FormEvents試してみました::)が、エラーを取得:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'field2' cannot be null

// AppBundle/Form/MyFormType.php 

// ... 
$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $even) { 
    $data = $event->getData(); 
    $form = $event->getForm(); 

    if (isset($data['field1'])) { // isset 
     $field2 = $this->container->get('repository')->find($data['field1'])->getValue(); // service works 

     $data['field2'] = $field2; // !!! doesn't work !!!    
     $data->setField2($field2); // !!! doesn't work !!!  
    } 
}); 

は私が間違って何をやっているの?前もって感謝します!

+1

のvar_dumpあなたのフィールド2を試してみて、あなたは 'g9m29 @ $フィールド2 = 'でtestValue' をごdbテーブル – g9m29

+0

を投稿してくださいすることができます;'どちらか動作しません。テーブルのフィールド名は 'field2'です。 –

+1

$ data ['field2'] = $ field2; $ data-> setField2($ data); ! – g9m29

答えて

2

この代わりに

use Symfony\Component\Form\FormEvents; 

$builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) { 
    $data = $event->getData(); 
    $form = $event->getForm(); 

    if (isset($data['field1'])) { 
     $field2 = $this->container->get('repository')->find($data['field1'])->getValue(); 

     $data['field2'] = $field2;    
     $event->setData($data); 
    } 
}); 
+0

まさに私が必要とするもの。ありがとうございました。 –

関連する問題