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?谢谢您可以在这里使用选择类型文档