2014-02-27 27 views
5
的设置程序

我有一个实体的Symfony窗​​体自定义类型。Symfony窗​​体:自定义名为

我想定制在提交表单时执行的代码,但仅限于一个字段。

例如,Symfony的会默认调用此:

$entity->setFoo($value); 

我想要做的调用,而不是像这样:

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

我如何能做到这一点,而不会影响所有其他属性是正确的与表格映射?

+0

Symfony调用$ entity-> set {$ someThing)= $ someThing,不是吗? –

回答

9

您可以在表单定义foo场为not mapped,然后在POST_SUBMIT添加监听器,将调用您的doSomething()方法:

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

它不会叫$entity->setFoo($value)。相反,它会根据您的意愿调用$entity->doSomething($value, true)

+0

谢谢,这是现货! –

+1

伟大的解决方法,但实体验证,也许一些其他的东西不会工作了。 – Leto

1

检查this后关于DataMapper(它从解释值对象开始,但链接将直接滚动到Data Mappers标头)。这是非常有用的,但在Symfony文档中错过了。