Symfony form: customize the setter that is called

北慕城南 提交于 2019-12-19 08:01:30

问题


I have a Symfony form custom type for an entity.

I want to customize the code that is executed when the form is submitted, but only for a field.

For example, Symfony will by default call this:

$entity->setFoo($value);

I want to do call instead something like:

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

How can I do that without affecting all other properties that are correctly mapped with the form?


回答1:


You can define your foo field in the form as not mapped and then add listener on the POST_SUBMIT that will call your doSomething() method:

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

It will not call $entity->setFoo($value). Instead it will call $entity->doSomething($value, true) as you wished.




回答2:


Check this post about DataMapper (it starts from explaining Value Objects, but link will scroll down to Data Mappers header directly). It's very useful but missed in Symfony docs.



来源:https://stackoverflow.com/questions/22075054/symfony-form-customize-the-setter-that-is-called

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!