2

该文档解释了如何使用表单事件动态修改表单,尤其是 POST_SUBMIT 事件。

按照此示例,在 POST_SUBMIT 事件侦听器中,我无法添加具有预填充数据的字段,例如:$form->add('position', 'text', array('data' => 'It works'));

该字段已添加但为空。

知道我该怎么做吗?


编辑

基本上表单类型如下所示:

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder->add('colors', 'choice', array(
        'choices' => array('blue', 'green', 'red'),
        'multiple' => true,
        'expanded' => true,
        'mapped' => false,
    ));

    $builder->get('colors')->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
        // ... Some logic to determine data to pre populate $myValue
        $myValue = 'It works';

        $form = $event->getForm()->getParent();
        $form->add('position', 'text', array(
            'data' => $myValue
        ));
    });

}
4

2 回答 2

1

我有同样的问题,提交的数据替换了默认值。所以,在我的 PRE_SUBMIT 监听器中,我检查了数据是否已提交,如果没有,我插入它们:

public function onPreSubmit(FormEvent $event)
{
    $form = $event->getForm();
    $data = $event->getData();
    if(!isset($data['MY_FIELD'])) {
        $data['MY_FIELD'] = $myCustomData;
        $event->setData($data);
    }
}

在我的例子中,'MY_FIELD' 是一个实体的嵌入表单,而 $myCustomData 是我的实体,它的字段集。

于 2015-02-05T07:25:12.893 回答
0

您的意思是加载时该字段显示为空,还是该字段未发布 $myValue 数据?在提交表单之前,表单不会运行 post_submit 事件侦听器,因此在您呈现它时它将显示为空白。提交表单后它仍然不会显示 $myValue 数据,因为控制器将重定向或加载不同的页面。如果您只想在加载表单时最初显示数据,我认为您不需要使用事件侦听器。您可以在创建表单之后但在呈现表单之前直接在控制器中设置表单值。

$form->get('position')->setData($myValue);

或者,也许您确实想要使用事件侦听器,您可能想要使用 PRE_SET_DATA 代替。您提到的食谱链接有几个示例,我认为您可能想重新访问该代码。

于 2014-02-11T16:46:12.403 回答