ConstraintValidator的上下文不返回ExecutionContextInterface的实例

时间:2016-01-13 20:57:26

标签: validation symfony

Symfony验证器似乎不起作用。我注意到服务validator.emailConstraintValidaotr::$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。

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但是按照文档教程它不起作用。 这很有效:

$errors = $this->get('validator')->validate($value, new Test());