Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Symfony:实体字段验证器和ajax动态内容_Forms_Symfony_Entity_Validation - Fatal编程技术网

Forms Symfony:实体字段验证器和ajax动态内容

Forms Symfony:实体字段验证器和ajax动态内容,forms,symfony,entity,validation,Forms,Symfony,Entity,Validation,我有两个实体(A和B),它们之间有多对一的关系 我用一个实体创建表单,并使用一个实体字段(下拉列表)来显示B实体中的行。我使用查询生成器来过滤它们。如果不更改列表中的值(即使用ajax),则一切正常 但如果我动态更改下拉列表中的值,当我提交表单时,我会出现以下错误“此值无效” 这是因为提交的值不包括在查询生成器返回的“数组”中 在symfony for entity字段中,此验证似乎是自动的(我不在该字段中使用任何断言)。我想把这个处理掉。但是怎么做呢?更明确地回答我的问题: 可以使用函数Bui

我有两个实体(A和B),它们之间有多对一的关系

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

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

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


在symfony for entity字段中,此验证似乎是自动的(我不在该字段中使用任何断言)。我想把这个处理掉。但是怎么做呢?

更明确地回答我的问题:

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

$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()));
        }
});

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

$form->add($factory->createNamed('id', 'hidden', $id, array('auto_initialize' => false)));

请你能提供代码样本吗?这似乎是绑定事件的问题。实际上,如果使用ajax更改下拉列表,则必须重新定义PRE_BIND表单事件。在看了一堆代码之后,我可以为您提供更简洁的解决方案。非常感谢。你好,gbxxx。我遇到了完全相同的问题,我想知道您是否可以编辑您的答案来帮助我,详细描述一下您是如何实现PRE_BIND解决方案的。提前非常感谢:)