我有一个实体的Symfony窗体自定义类型。Symfony窗体:自定义名为
我想定制在提交表单时执行的代码,但仅限于一个字段。
例如,Symfony的会默认调用此:
$entity->setFoo($value);
我想要做的调用,而不是像这样:
$entity->doSomething($value, true);
我如何能做到这一点,而不会影响所有其他属性是正确的与表格映射?
我有一个实体的Symfony窗体自定义类型。Symfony窗体:自定义名为
我想定制在提交表单时执行的代码,但仅限于一个字段。
例如,Symfony的会默认调用此:
$entity->setFoo($value);
我想要做的调用,而不是像这样:
$entity->doSomething($value, true);
我如何能做到这一点,而不会影响所有其他属性是正确的与表格映射?
您可以在表单定义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)
。
谢谢,这是现货! –
伟大的解决方法,但实体验证,也许一些其他的东西不会工作了。 – Leto
检查this后关于DataMapper(它从解释值对象开始,但链接将直接滚动到Data Mappers
标头)。这是非常有用的,但在Symfony文档中错过了。
Symfony调用$ entity-> set {$ someThing)= $ someThing,不是吗? –