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
Validation 多字段上的唯一性不';不显示错误消息_Validation_Symfony_Doctrine Orm_Constraints_Unique Constraint - Fatal编程技术网

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。