2014-02-27 6 views
5

genannt wird Ich habe einen benutzerdefinierten Symfony-Formulartyp für eine Entität.Symfony-Formular: passen Sie den Setter an, der

Ich möchte den Code anpassen, der ausgeführt wird, wenn das Formular gesendet wird, aber nur für ein Feld.

Zum Beispiel wird Symfony standardmäßig nennen dies:

$entity->setFoo($value); 

Ich möchte stattdessen so etwas wie zu tun nennen:

$entity->doSomething($value, true); 

Wie kann ich tun, dass alle anderen Eigenschaften ohne Beeinträchtigung, die korrekt sind mit der Form abgebildet?

+0

Symfony nennt $ entity-> set {$ someThing) = $ someThing, oder? –

Antwort

9

Sie können Ihre foo Feld in der Form, wie not mapped und fügen Sie dann Listener auf dem POST_SUBMIT definieren, dass Ihre doSomething() Methode aufrufen wird:

$builder->add('foo', null, array('mapped' => false)) 
    ; 

    $builder->addEventListener(
     FormEvents::POST_SUBMIT, 
     function(FormEvent $event) { 
      $entity = $event->getForm()->getData(); 
      $entity->doSomething($event->getForm()->get('foo')->getData(), true); 
     } 
    ); 

Es ist nicht $entity->setFoo($value) nennen. Stattdessen wird es $entity->doSomething($value, true) wie Sie wünschen anrufen.

+0

Danke das ist genau richtig! –

+1

Große Problemumgehung, aber Entitätsvalidierung und vielleicht einige andere Sachen werden nicht mehr funktionieren. – Leto

1

Überprüfen Sie this Post über DataMapper (es beginnt mit der Erläuterung von Value Objects, aber Link wird bis zu Data Mappers Kopfzeile direkt scrollen). Es ist sehr nützlich, aber in Symfony-Dokumenten nicht vorhanden.