2016-07-01 6 views
10

Ich habe eine Entitätsformular mit Symfony:Symfony: Kann ich null von Type/Form zurückgeben?

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' 
     )); 
    } 

Aber in POST_SUBMIT Fall, ich will null (keine Einheit) zurückzukehren. Getestet habe ich diese aber nicht funktioniert:

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

Können Sie mir helfen? Danke :)

+2

Können Sie uns bitte sagen, warum Sie null zurückgeben möchten? Was ist die Problemumgehung? –

+1

Wenn ein Formular einem Objekt zugeordnet, gesendet und verknüpft ist, warum möchten Sie null daraus erhalten? – goto

+0

Wenn etwas falsch ist, können Sie eine Ausnahme auslösen, aber nicht null. Zur Validierung können Sie Asserts verwenden. Wirklich, was ist die Problemumgehung? –

Antwort

0

Nach meinem Wissen können Sie ein Einreichungsformular nicht ändern. (Ich kann mich irren)

Aber wenn Sie ein Formular zurücksetzen wollen nach einreichen, können Sie es in Ihrem Controller tun können:

Zum Beispiel:

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, 
     [...]); 
} 

Natürlich müssen Sie es anpassen mit Dein eigener Code.

0

Eigentlich, wenn Sie möchten, dass Daten an Form-Entity übergeben werden, sollte das Ereignis abgehört werden ist FormEvents::PRE_SUBMIT. As described in the official doc.

+0

Passen Sie auf, PRE_SUBMIT Sie Daten von der Anfrage, mit denen das Formular erstellt werden. Dann sind Sie auf Felder beschränkt, die in der Form sind, Sie können das Formular hier nicht global "aufheben". – romaricdrigon

1

Könnten Sie bitte Ihren Controller-Code veröffentlichen? Übergeben Sie eine Objektreferenz an createForm, oder verwenden Sie $form->getData()? In Ihrem Fall sollten Sie sich an die zweite halten.

Versuchen Sie, das Ereignis SUBMIT anstelle von POST_SUBMIT zu verwenden. Wie Symfony doc sagt, "kann es verwendet werden, um Daten aus der normalisierten Darstellung der Daten zu ändern."