Symfony表单:自定义被调用的setter

时间:2014-02-27 16:53:11

标签: php symfony symfony-forms

我有一个实体的Symfony表单自定义类型。

我想自定义提交表单时执行的代码,但仅限于字段。

例如,Symfony默认会调用它:

$entity->setFoo($value);

我想打电话代替:

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

如何在不影响使用表单正确映射的所有其他属性的情况下执行此操作?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

检查关于DataMapper的this帖子(它从解释值对象开始,但链接将直接向下滚动到Data Mappers标题)。它非常有用,但在Symfony文档中遗漏了。