2016-07-01 9 views
10

私はsymfonyにエンティティフォームがあります。Symfony:Type/Formからnullを返すことはできますか?

class MyType extends AbstractType 
{ 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     ... 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'LogicielBundle\Entity\FichierGroup', 
      'intention' => $this->getName() . '_token' 
     )); 
    } 

しかしPOST_SUBMITイベントでは、私はヌル(無エンティティ)を返すようにしたいです。 私はこれをテストしたが、動作していない:あなたは私を

$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) { 
     .... my condition ... 
     $event->setData(null); 
    }); 

助けることができますか?ありがとう:)

+2

nullを返す理由を教えてください。回避策は何ですか? –

+1

フォームがオブジェクトにマップされ、送信され、バインドされている場合、なぜそれからヌルを取得したいのですか? – goto

+0

何か問題がある場合は、例外をスローすることはできますが、nullを返すことはできません。検証のためにAssertsを使用することができます。本当に、回避策は何ですか? –

答えて

0

私の知る限り、送信フォームを変更することはできません。

(私が間違っている可能性があります)しかし、あなたは後に提出するフォームをリセットしたい場合、あなたはあなたのコントローラでそれを行うことができます。

例えば:もちろん

public function fooAction() 
{ 
    ... 
    $form = $this->getEntityForm($entity); 

    ... 
    $form->handleRequest($request); 
    if ($form->isSubmitted()) { 
     // Do something 
     ... 
     // Reset your form with null as entity 
     $form = $this->getEntityForm(null);    
    } 

    ... 
    return $this->render(
     'yourfootwig.html.twig', 
     [ 
     'form' => $form->createView(), 
     ... 
     ] 
    ); 
} 

protected function getEntityForm($entity = null) 
{ 
    return $this->createForm(
     'Foo:MyType', 
     $entity, 
     [...]); 
} 

を、あなたがそれを適応しなければなりませんあなた自身のコード。

0

実際にフォームエンティティに渡されたデータを変更したい場合は、イベントはFormEvents::PRE_SUBMITです。 As described in the official doc.

+0

PRE_SUBMITでは、フォームの作成に使用するリクエストのデータを作成します。フォーム内のフィールドに制限されている場合、フォームをここでグローバルに「無効」にすることはできません。 – romaricdrigon

1

コントローラコードをお知らせください。 オブジェクト参照をcreateFormに渡すか、$form->getData()を使用しますか?あなたの場合、2番目に固執すべきです。

POST_SUBMITの代わりにSUBMITイベントを使用してみてください。 Symfonyの文書では、 "データの正規化された表現からデータを変更するために使用することができます。"

関連する問題