Symfony2的。访问Form Class中提交的值

时间:2014-03-07 14:22:31

标签: symfony symfony-forms

当表单未验证时,我需要访问Form Class中提交的数据,以便我可以在自定义字段中设置一些选项。

我试过

$data = $builder->getForm()->getData();
$data = $builder->getData();

但是$data有空对象。那么......在表单类中的验证错误之后,用户访问提交的数据的正确形式是什么?

由于

3 个答案:

答案 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()方法。