如何禁用Symfony表单中非映射EntityType字段的验证规则
报错原因
Symfony的EntityType默认自带选项验证逻辑,会校验提交的字段值是否存在于初始化字段时传入的choices列表中。你通过AJAX加载的选项不在初始choices范围内,因此触发This value is not valid报错,该验证逻辑和字段是否设置mapped=false无关。
解决方案
方案1:直接关闭字段验证(最适配你的需求)
如果你的Symfony版本 >= 5.4,直接在字段配置中新增choice_validation和constraints参数即可完全关闭该字段的默认验证:
->add('clientcustomer', EntityType::class, array( 'label' => 'Customer', 'class' => Customer::class, 'choices' => $this->customerRepository->findClientCustomersForSelect2(), 'placeholder' => 'New customer', 'required' => false, 'mapped' => false, // 新增配置 'constraints' => [], 'choice_validation' => false, ))
方案2:兼容低版本Symfony的处理方式
如果你的Symfony版本低于5.4,不支持choice_validation参数,可以将EntityType替换为ChoiceType,取消默认的实体存在性校验,后续在表单提交的处理逻辑中手动根据提交的ID查询对应的Customer实体即可:
->add('clientcustomer', ChoiceType::class, array( 'label' => 'Customer', 'choices' => $this->customerRepository->findClientCustomersForSelect2(), 'placeholder' => 'New customer', 'required' => false, 'mapped' => false, ))
内容的提问来源于stack exchange,提问作者Karim Mtl
相关产品推荐
相关产品推荐

