Symfony 3 - 提交和验证后修改表单值

时间:2017-11-13 10:14:23

标签: php forms symfony validation

在我的申请中,我需要修改已提交的和经过验证的表单值。

用例是一个表单,其地址由外部Web服务验证并可能已更正。我需要在更正后更新表单中的地址,并告知用户新呈现的表单。修正后,用户不应该收到验证错误。

Symfony的表单组件不允许修改已提交的表单值并抛出AlreadySubmittedException异常。

一种解决方案是将更正的地址传递给模板并向其添加逻辑。但在我看来,这是错误的方式。

还有其他解决方案吗?

提前致谢, 延

1 个答案:

答案 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了解更多信息。