问题
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