[英]Symfony2 validations (yml) ignored
我在我的bundle Resources / config目录中设置了validation.yml。 我在config.yml中启用了验证器:
framework:
validation: { enabled: true, enable_annotations: false }
资源/配置/ validation.yml:
MyBundle\AppBundle\Handler\SearchModel:
properties:
search:
- Length:
min: 2
max: 50
minMessage: "Your string must be at least {{ limit }} characters long"
maxMessage: "Your string cannot be longer than {{ limit }} characters long"
在我的控制器中我正在做:
$validator = $this->get('validator');
$errors = $validator->validate($searchModel);
我很确定(因为我仔细检查过)要验证的模型的属性是string(1)1 char。 (应该是最小的2!)
但$ error的var_dump()表明:
object(Symfony\Component\Validator\ConstraintViolationList)#327 (1) {
["violations":"Symfony\Component\Validator\ConstraintViolationList":private]=>
array(0) {
}
}
因此,不会抛出任何错误。 我怎么解决这个问题? 我想验证器工作:)
更新
我通过解决方案让它(现在)工作。 我向(SearchModel)类添加了一个loadValidatorMetaData方法来验证。
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata
->addPropertyConstraint(
'search',
new Assert\Length(
array('min' => 2, 'minMessage' => 'Error message.')
)
);
}
检查$ validator-> validate($ searchModel)时; 它返回错误,因此验证工作正常。 但不是.yml文件:(
我设置了一个小测试用例并且没有错误。 我添加了NotBlank约束,并在搜索为空时出错。
Acme\DemoBundle\Command\SearchModel:
properties:
search:
- Length:
min: 2
max: 5
minMessage: "Your string must be at least {{ limit }} characters long"
maxMessage: "Your string cannot be longer than {{ limit }} characters long"
- NotBlank: ~
然后我将搜索设置为一个字符
class SearchModel
{
public $search = 'a';
}
它触发了最小长度错误。
我通读了长度文档: http : //symfony.com/doc/current/reference/constraints/Length.html 。 当然,似乎零长度字符串应该触发错误。
无论如何,添加一个NotBlank约束,你应该好好去。
我查了一下代码:
namespace Symfony\Component\Validator\Constraints;
class LengthValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (null === $value || '' === $value) {
return;
}
所以我猜这就是所谓的无证“特征”。 字符串长度为零不被认为小于min! 很想知道是否有关于此的错误报告。 但同样,NotBlank将起作用。 您始终可以调整错误消息,以便用户知道限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.