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?
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.