最佳实践symfony验证

时间:2014-04-29 13:58:16

标签: symfony validation

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

文档:

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

然后添加类似的内容:

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

我在互联网上看到的教程:

他们直接在Entity中添加约束,如:

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

有一个最好的实践?我应该在validation.yml或我的实体中编写所有约束吗?是否有可能面对没有实体的形式?

从单独的文件中受益: 您只有一个文件中的所有约束

从实体文件中获益: 你有你的表单constaints的sql constaints,你有字段类型。

那么,我该怎么用?或者没有人关心这个?

编辑:我没有找到任何有关如何在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'

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:3)

  

我应该在validation.yml或我的实体中编写所有约束吗?

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

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

是否可以面对没有实体的表单?

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

'data_class' => '...'

提交表单后,您可以使用$form->getData()

访问表单数据
  

受益于单独的文件:您只有一个文件中的所有约束

     

从实体文件中获益:你的表单有sql constaints   constaints,你有字段类型。

     

那么,我该怎么用?或者没有人关心这个?

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