在我的申请中,我需要修改已提交的和经过验证的表单值。
该用例是一个带有地址的表单,该地址已由外部 Web 服务验证并可能更正。我需要在更正后更新表单中的地址,并在新呈现的表单中通知用户这一点。纠正后用户不应收到验证错误。 Symfony 的表单组件不允许修改已提交的表单值并抛出
AlreadySubmittedException
异常。
一种解决方案是将正确的地址传递给模板并向其添加逻辑。但在我看来,这是错误的方式。还有其他解决办法吗?
正确的方法是向表单添加事件侦听器并验证/更正其中的值。
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);
});
}
}