Symfony 3:在提交表单后设置值

4

我有一个表单集合 form collection,在提交表单后,想根据 field1 的值设置 field2。表单中的 field2 不可编辑,但是必填。

我尝试了每个 FormEvent (FormEvents::),但是出现了以下错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'field2' cannot be null

// AppBundle/Form/MyFormType.php

// ...
$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $even) {
    $data = $event->getData();
    $form = $event->getForm();

    if (isset($data['field1'])) { // isset
        $field2 = $this->container->get('repository')->find($data['field1'])->getValue(); // service works

        $data['field2'] = $field2; // !!! doesn't work !!!              
        $data->setField2($field2); // !!! doesn't work !!!    
    }
});

我做错了什么?提前感谢!

1
请使用var_dump函数输出你的第二个字段,能否请你提供一下数据库表格? - g9m29
@g9m29 $field2 = 'testvalue'; 也不起作用。表中的字段名为 field2 - Mr. B.
1
$data['field2'] = $field2; $data->setField2($data);$data ['field2'] = $field2; $data->setField2($data); - g9m29
1
如果您使用POST_SUBMIT事件,则表单的基础数据已经转换为模型。如果$data应该是一个实体,$data['field2'] = $field2肯定会导致致命错误("对象不能用作数组")。 - VaN
4
如果我没记错的话,在POST_SUBMIT事件中无法修改任何表单数据。请改用PRE_SUBMIT事件。 - gp_sflover
1个回答

5

试试这个替代方案

use Symfony\Component\Form\FormEvents;

$builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
    $data = $event->getData();
    $form = $event->getForm();

    if (isset($data['field1'])) {
        $field2 = $this->container->get('repository')->find($data['field1'])->getValue();

        $data['field2'] = $field2;              
        $event->setData($data); 
    }
});

正是我所需要的。谢谢。 - Mr. B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接