当表单未验证时,我需要访问Form Class中提交的数据,以便我可以在自定义字段中设置一些选项。
我试过
$data = $builder->getForm()->getData();
$data = $builder->getData();
但是$data
有空对象。那么......在表单类中的验证错误之后,用户访问提交的数据的正确形式是什么?
由于
答案 0 :(得分:4)
问题是您在尚未处理时尝试访问提交的数据。基本上,当您在构建器中(对于抽象类型buildForm
)时,您正在构建表单结构。它与表单提交/绑定无关。这就是您在调用$builder->getData()
时获取初始数据的原因,因为它只知道此状态下的初始数据。
知道表单组件允许您通过事件访问提交的数据。您可以将侦听器附加到构建器并依赖*_submit
事件之一。 FormEvent类将为您提供$event->getData()
提交的数据。
有关详细信息,请参阅此文档:http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html
答案 1 :(得分:0)
查看 $ options 变量(var_dump it)
我记得你正在寻找
$options['data']
答案 2 :(得分:0)
对于那些想知道如何使用Form Events的人。
以下是一个示例,您可以在用户点击提交按钮后修改表单。
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
// ...
/* Listener to order to set a price if it does not exist yet */
$builder->get('price')->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$data = $event->getData();
// modify it as you wish
$event->setData($data);
});
FormEvents :: PRE_SUBMIT事件在开头调度 Form :: submit()方法。
如果需要,可以在此示例中显示price
表单,然后再显示该表单。
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
// ...
/* Listener to order to set a price if it does not exist yet */
$builder->get('price')->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$data = $event->getData();
if (null === $data) { $data = '0.00'; }
$event->setData($data);
});
FormEvents :: PRE_SET_DATA事件在开始时调度 Form :: setData()方法。