Пользовательский валидатор не вызывает @service_container

Версия Symfony: 2.5

ошибка

«Исправляемая фатальная ошибка: Аргумент 1 передан Intermedius \ UserBundle \ Validator \ Constraints \ RegisteredEmailValidator :: __ construct () должен реализовывать интерфейс Symfony \ Component \ DependencyInjection \ ContainerInterface, не заданный, вызываемый в D: \ Projektek \ pricing_tool \ backend \ vendor symfony \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Validator \ ConstraintValidatorFactory.php в строке 71 и определен в D: \ Projektek \ pricing_tool \ backend \ src \ Intermedius \ UserBundle \ Validator \ Constraints \ RegisteredEpVal. line

RegisteredEmail.php

 class RegisteredEmail extends Constraint
{
public $message = "MSG";
}

RegistereEmailValidator.php

class RegisteredEmailValidator extends ConstraintValidator{
public $containerInterface;

function __construct(ContainerInterface $containerInterface)
{
$this->containerInterface = $containerInterface;
}public function validate($value, Constraint $constraint)
{

if (!$constraint instanceof RegisteredEmail) {
throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\RegisteredEmail');
}

}public function validateBy()
{
return "registered_email";
}
}

services.yml

services:
intermedius.user.validator.registered_email:
class: Intermedius\UserBundle\Validator\Constraints\RegisteredEmail
arguments: [ @service_container ]
tags:
- { name: validator.constraint_validator, alias: registered_email }

0

Решение

Класс вашего определения службы валидатора должен быть установлен как класс валидатора, а не как ограничение.

class: Intermedius\UserBundle\Validator\Constraints\RegisteredEmailValidator
0

Другие решения

Вы не должны вводить service_container в ваших услугах. В вашем примере вы должны вместо этого вводить только те услуги, которые вам нужны. См., Например, раздел «Как избежать зависимости кода от контейнера» http://symfony.com/doc/current/components/dependency_injection.html.

0