在我的申请中,我需要修改已提交的和经过验证的表单值。
用例是一个表单,其地址由外部Web服务验证并可能已更正。我需要在更正后更新表单中的地址,并告知用户新呈现的表单。修正后,用户不应该收到验证错误。
Symfony的表单组件不允许修改已提交的表单值并抛出AlreadySubmittedException异常。
一种解决方案是将更正的地址传递给模板并向其添加逻辑。但在我看来,这是错误的方式。
还有其他解决方案吗?
提前致谢, 延
答案 0 :(得分:0)
是的,你是正确的,将修正后的值传递给模板是不对的。
正确的方法是向表单添加事件侦听器并验证/更正其中的值。
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class FooType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('address');
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
$data = $event->getData();
// do webservice validation here and
$data = [];
// set new data
$event->setData($data);
});
}
}
docs了解更多信息。