Symfony验证器似乎不起作用。我注意到服务validator.email
。 ConstraintValidaotr::$context
未返回ExecutionContextInterface
个实例,因此我收到错误
尝试调用类“Symfony \ Component \ Validator \ Constraints \ EmailValidator”的名为“buildViolation”的未定义方法。
使用自定义约束验证器也会发生同样的情况:
<?php
namespace MyAppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
class Test extends Constraint
{
public $message = 'Error message';
public function getTarget()
{
return self::CLASS_CONSTRAINT;
}
public function validatedBy()
{
return 'test_validator';
}
}
和验证器
<?php
namespace MyAppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class TestValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
$this->context->buildViolation('...')->addViolation('test');
}
}
services.yml
validator.test:
class: MyAppBundle\Validator\Constraints\TestValidator
tags:
- { name: validator.constraint_validator, alias: test_validator }
我得到了同样的错误。 这个
public function validate($value, Constraint $constraint)
{
echo get_class($this->context);
$this->context->buildViolation('...')->addViolation('test');
}
控制器上的:
$this->get('validator.test')->validate('', new Test());
说上下文是MyAppBundle\Validator\Constraints\TestValidator
的一个实例。没有任何意义。
我正在使用Symfony 3.0.0。
答案 0 :(得分:0)
我不知道为什么,但是按照文档教程它不起作用。 这很有效:
$errors = $this->get('validator')->validate($value, new Test());