Validation 多字段上的唯一性不';不显示错误消息
我已将以下约束添加到实体:Validation 多字段上的唯一性不';不显示错误消息,validation,symfony,doctrine-orm,constraints,unique-constraint,Validation,Symfony,Doctrine Orm,Constraints,Unique Constraint,我已将以下约束添加到实体: * @ORM\Table(name="link", uniqueConstraints={@ORM\UniqueConstraint(name="unique_link_idx", columns={"first_form_id", "first_question_id","last_form_id","last_question_id"})}) * @UniqueEntity(fields={"firstForm", "firstQuestion","lastF
* @ORM\Table(name="link", uniqueConstraints={@ORM\UniqueConstraint(name="unique_link_idx", columns={"first_form_id", "first_question_id","last_form_id","last_question_id"})})
* @UniqueEntity(fields={"firstForm", "firstQuestion","lastForm","lastQuestion"}, message="Cette liaison existe déjà !")
* @ORM\Entity(repositoryClass="Ineat\LinkQuestionBundle\Entity\LinkRepository")
Uniquentity约束工作得很好,因为在添加它之前,当尝试向DB插入完全相同的实体时,我对NT完整性约束有一个DBALException。
从那时起,我不再有这个异常,表单不再验证,但是{{{form_errors(form)}}
不会打印任何消息
签入控制器后,$form->getErrors()
返回一个空数组,而$form->getErrorsString()
包含uniquentity约束
我怎样才能让我的Uniquentity的约束错误消息显示出来,因为Uniquentity验证在您的一个子表单中似乎失败了
(由于错误消息仅出现在
getErrorsAsString
中,而不出现在getErrors
中)
。。。要使子窗体错误在父窗体中可用,请使用错误冒泡:
$formBuilder->add('child-form','child-form-type', array(
'error_bubbling' => true,
)
)
。。。或在您的子窗体中:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'error_bubbling' => true,
));
}
有时出现问题是因为实体没有将错误消息绑定到正确的字段。使用
validation.yml
文件可以更好地控制错误消息的处理方式和位置
# src/Ineat/LinkQuestionBundle/Resources/config/validation.yml
Ineat\LinkQuestionBundle\Entity\LinkRepository:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
fields: [firstForm, firstQuestion, lastForm, lastQuestion]
errorPath: lastQuestion
message: 'This port is already in use on that host.'
更多信息请点击此处:
此外,将文本字符串放入“翻译”文件也是一种很好的做法(即使您只使用一种语言)。您的视图/实体/表单/控制器中不会有文本碎片…
它们都将位于您的翻译文件夹中的一个位置。如有必要,还可以一次全部更改重复字符串。它看起来是这样的:
# src/Ineat/LinkQuestionBundle/Resources/config/validation.yml
Ineat\LinkQuestionBundle\Entity\LinkRepository:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
fields: [firstForm, firstQuestion, lastForm, lastQuestion]
errorPath: lastQuestion
message: 'linkquestion.form.errors.unique'
# src/Ineat/LinkQuestionBundle/Resources/translations/validators.fr.yml
linkquestion:
form:
errors:
unique: "This port is already in use on that host."
# Or which ever structure you choose.
然后告诉您的应用程序它将始终使用法语。
getErrorsString()
访问与getErrors()
相同的属性,即Symfony/Component/Form/Form中的this->errors
,因此$Form->getErrors()
不可能返回空数组。看看Nop,它只访问$this->children,而getErrors只访问errors。那么uniquentity约束来自您的一个子表单。。。你应该这么说。错误\u在我的全局窗体上进行bubling不起作用,我必须将它添加到每个子窗体,为什么?使用->add()
或使用setDefaultOptions()
?当然,子表单中的setDefaultOptions-编辑答案以使其更清晰。错误冒泡“通知”父窗体其错误提示。在我看来,error_冒泡应该默认设置为true。