Validation 在FormType或实体/Yaml中使用验证

Validation 在FormType或实体/Yaml中使用验证,validation,symfony,Validation,Symfony,使用验证实体、Yaml或FormType时有哪些区别 表格类型 .... ->add('email', 'text', array ( 'constraints' => array ( new Email(array('message' => 'error Email')) ) )) .... 亚马尔

使用验证实体、Yaml或FormType时有哪些区别

表格类型

    ....
    ->add('email', 'text', array (
                    'constraints' => array (
                        new Email(array('message' => 'error Email'))
                    )
                ))
....
亚马尔

实体

{
    /**
     * @Assert\Email(
     *     message = "error Email",
     * )
     */
     protected $email;
}

所有这些方法都是一样的?

它们不一样!您混淆了实体验证和表单验证:

  • 实体验证属于实体。这意味着不管新数据是来自表单还是ajax查询,也不管您只是设置了一些常量数据。通过对实体调用验证来触发验证。注意:实体验证也在表单验证上运行
  • 表单验证属于表单。这意味着您可以使用它们验证表单值(在调用$form->isValid()时)。但这可能会导致无效的实体,因为没有任何东西可以保证您的实体是一致的(只是形式)
因此,Symfony建议使用实体验证而不是表单验证程序


除此之外,注释、yml、xml或php格式之间没有区别。只有先例。

它们不一样!您混淆了实体验证和表单验证:

  • 实体验证属于实体。这意味着不管新数据是来自表单还是ajax查询,也不管您只是设置了一些常量数据。通过对实体调用验证来触发验证。注意:实体验证也在表单验证上运行
  • 表单验证属于表单。这意味着您可以使用它们验证表单值(在调用$form->isValid()时)。但这可能会导致无效的实体,因为没有任何东西可以保证您的实体是一致的(只是形式)
因此,Symfony建议使用实体验证而不是表单验证程序


除此之外,注释、yml、xml或php格式之间没有区别。只有先例。

我认为它们将应用相同的验证约束

我倾向于在validation.yml中保留所有约束,因为在我看来,这是最干净的方法。也更适合翻译

但这一切都取决于你所从事的背景和项目


更新:阅读Riska的条目后,我同意他的观点。最后的结果是一样的,但他有正确的观点。

我认为他们会应用相同的验证约束

我倾向于在validation.yml中保留所有约束,因为在我看来,这是最干净的方法。也更适合翻译

但这一切都取决于你所从事的背景和项目


更新:阅读Riska的条目后,我同意他的观点。最后的结果是相同的,但他有正确的观点。

是否有方法使用相同的validation.yml,因此应用于Entite的约束也应用于formtype

例如,若实体中的标题字段是50charsm ax length,那个么formttype中的标题字段也是如此

因此,我们可以避免在formtype的add方法中指定最大长度

总之


如何在formtype中使用实体验证约束,以便自动应用相同的构造(要求的最大长度)等?

是否有方法使用相同的validation.yml,以便将应用于实体的约束也应用于formtype

例如,若实体中的标题字段是50charsm ax length,那个么formttype中的标题字段也是如此

因此,我们可以避免在formtype的add方法中指定最大长度

总之

如何在formtype中使用实体验证约束,以便自动应用相同的构造(要求的最大长度)等

{
    /**
     * @Assert\Email(
     *     message = "error Email",
     * )
     */
     protected $email;
}