У меня есть специальный тип формы 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.