当用户发送表单时,我问自己有关验证的问题...我看到了文档和教程。他们解释了两种获取有效数据的方法:
文档:
您必须创建文件: /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/