Форма Symfony: настройте сеттер, который называется

У меня есть специальный тип формы Symfony для объекта.

Я хочу настроить код, который выполняется при отправке формы, но только для поля.

Например, Symfony по умолчанию вызовет это:

$entity->setFoo($value); 

Я хочу сделать вызов вместо чего-то вроде:

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

Как я могу это сделать, не затрагивая все другие свойства, которые правильно отображаются в форме?

Вы можете определить свое поле 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) по вашему желанию.

Проверьте этот пост о DataMapper (он начинается с объяснения объектов Value, но ссылка будет прокручиваться вниз до заголовка Data Mappers напрямую). Это очень полезно, но пропущено в документах Symfony.