由于我的项目要求,我必须为每个约束违规添加一个数字代码,除了消息之外。我查看了ConstraintViolation
类并看到它确实实现了$code
属性,因此这对我的需求来说是完美的...除非我没有简单的方法可以指定这个注释上的代码。
例如,查看Email
约束或其parent class是如何实现的,在任何地方都没有任何代码的迹象,这使得注释无法定义它。
validators也会阻止编码人设置$code
,因为他们没有将第五个参数传递给addValidation
,这是代码本身。
$this->context->addViolation($constraint->message, array('{{ value }}' => $value));
所以,我的问题很简单:我错过了什么吗?有没有办法通过注释设置约束违规代码并不痛苦?理想情况下,我想做类似的事情:
/**
* @Assert\NotBlank(code=400)
* @Assert\Email(code=401)
*/
protected $email;
编辑Constraint.php
添加$code
属性(作为有效的注释代码)和所有约束验证器将第五个参数传递给addviolation
似乎是一个糟糕的主意!
当然我可以实现我自己的验证器,但是有一套预定义验证器的重点是什么呢?这只是一个单行改变。
答案 0 :(得分:0)
我认为你有一个小错误。验证器中的code属性不是您应该查看的属性。我认为你应该创建自己的Validator约束,它们是非常简单的类: https://github.com/symfony/Validator/blob/master/Constraints/Choice.php
只需投入一个公共代码属性,然后您可以通过注释或PHP进行设置。您不需要新的验证服务,只需要额外的属性。在构造约束时,将自动添加此属性:
https://github.com/symfony/Validator/blob/master/Constraint.php
以下是有关如何创建自定义约束的更多信息:
http://symfony.com/doc/2.1/cookbook/validation/custom_constraint.html