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
Symfony3在EntityType的附加选项上选择时发生约束冲突错误_Symfony_Validation - Fatal编程技术网

Symfony3在EntityType的附加选项上选择时发生约束冲突错误

Symfony3在EntityType的附加选项上选择时发生约束冲突错误,symfony,validation,Symfony,Validation,我构建的表单包含实体类型的字段: /** * Show account register form. * * @param FormBuilderInterface $builder Builder to modify */ protected function showAccountRegisterForm(FormBuilderInterface $builder) { $builder ->add('bank', Entity

我构建的表单包含实体类型的字段:

/**
 * Show account  register form.
 *
 * @param FormBuilderInterface $builder Builder to modify
 */
protected function showAccountRegisterForm(FormBuilderInterface $builder)
{
    $builder
        ->add('bank',
            EntityType::class,
            [
                'class' => 'AdminBundle:Bank',
                'choice_label' => 'name',
                'required' => false,
                'translation_domain' => 'form',
                'placeholder' => 'Choose a bank',
            ]
        )
    ;
}
我还添加了一个选项,用户可以使用finishView功能选择哪个调用“其他”:

public function finishView(FormView $view, FormInterface $form, array $options)
{
    //new option
    $other = new ChoiceView(array(), 'other', $this->translator->trans('bank.option.other'));
    //adding the new option
    $view->children['bank']->vars['choices'][] = $other;
}
一切正常,它为我呈现“其他”选项,但当我选择“其他”选项并提交时,我在该实体上得到了一个表单错误。 有人知道如何解决这个问题吗?多谢各位

我认为这里的问题在于,它的值是“其他” 这是一个字符串,我们的字段是EntityType,这就是为什么它会导致ConstraintViolation错误。我已经对此搜索了几天,但都能找到正确的答案。

您正在使用实体类型,并且您正在尝试提交不存在的实体。如果要使用实体类型,您需要在数据库中有所选实体的实际记录。

您正在使用实体类型,并且您正在尝试提交不存在的实体。如果您想使用实体类型,您需要在数据库中有选择的实际记录。

好的,我最终从表单生成器中删除了“bank”以使表单验证无效,并在控制器中自己验证,然后在控制器中将banks传递给模板并循环通过它来创建选择,最后从请求中获取bank

为了帮助某人节省时间,您需要在Symfony表单中使用一个额外字段。在这里,我对EntityType和ChoiceType进行了测试,它们都要求在呈现表单时发送的数据存在,如果发送的数据不存在,则会导致表单ConstraintViolation错误。因此,如果您发送的数据是js添加的新数据(选项),那么它将出错。与此类似的另一种情况是,如果使用EntityType和query_builder(与使用ChoiceType和从函数中获取选择相同),则js添加的新数据(选项)最有可能通过编写的查询获取。 例如:您的查询生成器将只获取状态为true的银行,但您刚刚添加的新银行状态为false,这也会导致错误


希望这会有所帮助:)

好的,我最终从表单生成器中删除了“bank”以使表单验证无效,并在控制器中自己验证,然后在控制器中将banks传递给模板并循环创建选择,最后从请求中获取bank

为了帮助某人节省时间,您需要在Symfony表单中使用一个额外字段。在这里,我对EntityType和ChoiceType进行了测试,它们都要求在呈现表单时发送的数据存在,如果发送的数据不存在,则会导致表单ConstraintViolation错误。因此,如果您发送的数据是js添加的新数据(选项),那么它将出错。与此类似的另一种情况是,如果使用EntityType和query_builder(与使用ChoiceType和从函数中获取选择相同),则js添加的新数据(选项)最有可能通过编写的查询获取。 例如:您的查询生成器将只获取状态为true的银行,但您刚刚添加的新银行状态为false,这也会导致错误


希望这会有所帮助:)

值“其他”在实体验证中不存在。将“其他”替换为“”并在提交表单时在控制器中对其进行管理。实体类型不是用来处理特殊情况的,只是在函数finishview中接受空格,或者使用ChoiceType进行manuel配置。该值实体验证中不存在其他验证。将“其他”替换为“”,并在提交表单时在控制器中对其进行管理。实体类型不是用来处理特殊情况的,只是在函数finishview中接受空的大小写,或者在manuel配置中使用ChoiceType。所以如果我使用EntityType,呈现的选择必须在数据库中具有相同的记录值?如果是这样的话,有没有其他类型可以替代EntityType?谢谢您可以在这里使用选择类型文档,所以如果我使用EntityType,呈现的选择必须在数据库中具有相同的记录值?如果是这样的话,有没有其他类型可以替代EntityType?谢谢您可以在这里使用选择类型文档