3

由于我的项目要求,除了消息之外,我必须为每个约束违规添加一个数字代码。我查看了这个ConstraintViolation类,发现它确实实现了一个$code属性,所以这对我的需求来说是完美的……除了我找不到简单的方法来在注释上指定这个代码。

例如,查看Email约束或其父类是如何实现的,任何地方都没有该代码的迹象,这使得注释无法定义它。

验证器还禁止编码器设置$code,因为它们没有将第五个参数传递给addValidation代码本身。

$this->context->addViolation($constraint->message, array('{{ value }}' => $value));

所以,我的问题很简单:我错过了什么吗?有没有办法通过不痛苦的注释来设置约束违规代码?理想情况下,我想做这样的事情:

/**
 * @Assert\NotBlank(code=400)
 * @Assert\Email(code=401)
 */
protected $email;

编辑Constraint.php以添加$code属性(作为有效的注释代码)和所有约束验证器以将第五个参数传递给addviolation似乎是一个糟糕的主意!

当然我可以实现我自己的验证器,但是拥有一组预定义的验证器有什么意义呢?这只是一条线的变化。

4

1 回答 1

0

我认为你有一个小错误。验证器中的 code 属性不是您应该查看的。我认为您应该只创建自己的验证器约束,它们是非常简单的类: 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

于 2013-03-06T07:02:56.233 回答