当用户发送表单时,我问自己有关验证的信息......我看到了文档和教程。他们解释了有效数据的两种方法:
文档:
您必须创建文件: /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'
致以最诚挚的问候,
答案 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,你有字段类型。
那么,我该怎么用?或者没有人关心这个?
这更多是关于个人偏好。就个人而言,我更喜欢在同一时间进行验证和表格。当我想要对表格中的某些字段进行更改时,在其他文件中搜索验证会花费更多时间。