symfony - symfony 验证最佳实践

标签 symfony validation

当用户发送表单时,我问自己有关验证的问题...我看到了文档和教程。他们解释了两种获取有效数据的方法:

文档:

您必须创建文件: /Resources/config/validation.yml

然后添加类似的内容:

Acme\BlogBundle\Entity\Author:
    properties:
        name:
            - NotBlank: ~

我在网上看到的教程:

他们直接在实体中添加约束,例如:

use Symfony\Component\Validator\Constraints as Assert;
  /**
   * @var string $title
   *
   * @ORM\Column(name="title", type="string", length=255)
   * @Assert\MinLength(10)
   */
  private $title;

有最佳实践吗?我应该将所有约束写入 valid.yml 还是我的实体中?是否可以面对一个没有实体的形式?

单独文件的好处: 所有约束都集中在一个文件中

实体文件的好处: 您有带有表单约束的 sql 约束,并且有字段类型。

那么,我应该使用什么?还是没有人关心这一点?

编辑:我没有找到任何有关如何在validation.yml中添加变量的信息,例如:

Acme\BlogBundle\Entity\Author:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
fields: [name]
message: {{ name }} isn't available

在实体中:

@Assert\UniqueEntity(message='{{ name }} isn't available'

最诚挚的问候,

最佳答案

Should I write all constraints in validation.yml or in my entities?

可以,但不是必须,更多的是个人喜好。就我个人而言,我更喜欢验证表单中的输入,如下所示:

$builder->add('contactPerson', 'text', array(
    'label' => 'Contact person',
    'constraints' => array(
        new NotBlank(array('message' => 'This field can not be empty.'))
    ),
    'required' => true,
));

Is it possible to face a form without entity behind?

是的,但通常最好使用后面的实体。如果您想省略表单后面的实体,只需从表单的 setDefaultOptions 方法中删除此行:

'data_class' => '...'

提交表单后,您可以使用$form->getData()访问表单数据。

Benefit from separate file: You have all constraints in only one file

Benefit from entity file: You have sql constaints with your form constaints and you have the field type.

So, what should I use? Or no one cares about that?

这更多的是个人喜好。就我个人而言,我更喜欢同时进行验证和表单。当我想更改表单中的某些字段时,在其他文件中搜索验证会花费更多时间。

关于symfony - symfony 验证最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23366810/

相关文章:

symfony - 在 Symfony2 中如何获取用户的完整角色列表

php - Symfony 3.4 - 检测到服务的循环引用

php - 无法在FOSElasticaBundle中排序

php - Symfony 2 嵌入式表格

php - 使用 MySQL 数据库处理 PHP Symfony 中的队列竞争条件

javascript - 如何验证动态生成的文本区域和复选框

validation - OpenAPI:如何验证示例?

jquery - 在 MVC 4.0 站点中,Unobtrusive jQuery 在 jQuery 1.9 升级中失败

Javascript 表单(带有单选按钮)验证不起作用

javascript - 如何验证用户是否选择了要上传的文件?