1

我有 2 个实体(A 和 B),它们之间存在多对一关系。

我使用 A 实体创建表单,并使用实体字段(下拉列表)来显示 B 实体中的行。我使用查询生成器来过滤它们。如果不更改列表中的值(即使用 ajax),一切正常。

但是,如果我动态更改下拉列表中的值,当我提交表单时,我会收到此错误“此值无效”

这是因为提交的值不包含在查询生成器返回的“数组”中。

似乎这个验证在 symfony 中对于实体字段是自动的(我没有在这个字段上使用任何断言)。我想摆脱这个。但是如何?

4

2 回答 2

0

更明确地回答我的问题:

可以使用函数 BuildForm 中的事件侦听器重新定义 PRE_BIND 表单事件,如下例所示:

$factory = $builder->getFormFactory();

$builder->addEventListener(FormEvents::PRE_BIND, function($event) use ($factory) {
        $form = $event->getForm();
        $case = $event->getData();
        $id = $case['id'];

        if ($case) {
            $form->remove('id');
            $form->add($factory->createNamed('hidden', 'id',$id, array()));
        }
});
于 2013-06-12T14:16:29.370 回答
0

对于 Symfony 2.3,您需要添加 auto_initialize = false 并更改参数的顺序:

$form->add($factory->createNamed('id', 'hidden', $id, array('auto_initialize' => false)));
于 2013-07-01T12:16:33.683 回答