注释上的Symfony2约束违规代码定义

时间:2013-03-04 16:48:31

标签: php symfony error-handling validation

由于我的项目要求,我必须为每个约束违规添加一个数字代码,除了消息之外。我查看了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似乎是一个糟糕的主意!

当然我可以实现我自己的验证器,但是有一套预定义验证器的重点是什么呢?这只是一个单行改变。

1 个答案:

答案 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