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

Mat*_*oli 5 php symfony-forms symfony

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

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

例如,Symfony默认会调用:

$entity->setFoo($value);
Run Code Online (Sandbox Code Playgroud)

我想打电话来代替:

$entity->doSomething($value, true);
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*bov 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);
        }
    );
Run Code Online (Sandbox Code Playgroud)

它不会打电话$entity->setFoo($value).相反,它会$entity->doSomething($value, true)按你的意愿打电话.