Symfony2 – Пользовательский валидатор и зависимость

Я пытаюсь использовать инъекцию зависимостей для пользовательского валидатора, чтобы иметь возможность использовать entityManager.

Я последовал примеру Symfony: Injection Dependency Injection , но я всегда получаю это сообщение об ошибке:

FatalErrorException: Ошибка: класс 'isdoi' не найден в /home/milos/workspace/merrin3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Validator/ConstraintValidatorFactory.php строка 68

Вот мои классы:

1. Класс IsDOI:

<?php namespace Merrin\MainBundle\Validator\Constraints; use Symfony\Component\Validator\Constraint; /** * @Annotation */ class IsDOI extends Constraint { public $message_publisher_DOI = 'The Publisher DOI abbreviation does not correspond to the DOI you filled in !'; public $message_journal_DOI = 'No journal found with the DOI you filled in !'; public $journal; public $doiAbbreviation; public function validatedBy() { return "isdoi"; } public function getTargets() { return self::CLASS_CONSTRAINT; } } 

2. Класс IsDOIValidator:

 <?php namespace Merrin\MainBundle\Validator\Constraints; use Doctrine\ORM\EntityManager; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\DependencyInjection\ContainerBuilder; class IsDOIValidator extends ConstraintValidator { private $entityManager; public function __construct(EntityManager $entityManager) { $this->entityManager = $entityManager; } public function validate($value, Constraint $constraint) { $em_mdpipub = $this->entityManager('mdpipub'); //Do some tests here... } } 

3. Услуга:

 merrin.main.validator.isdoi: class: Merrin\MainBundle\Validator\Constraints\IsDOIValidator arguments: entityManager: "@doctrine.orm.entity_manager" 

Где я ошибаюсь? Спасибо за помощь.

    У вас неправильный служебный файл, когда вы добавляете теги и псевдоним, вы можете использовать имя «isdoi»

     merrin.main.validator.isdoi: class: Merrin\MainBundle\Validator\Constraints\IsDOIValidator arguments: entityManager: "@doctrine.orm.entity_manager" tags: - { name: validator.constraint_validator, alias: isdoi } 

    Вы сообщаете Symfony2, что класс validateBy method для вашего ограничения isdoi ( validateBy method ). Однако ваш валидатор является IsDOIValidator .

    Вы должны использовать:

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

    Однако, если ваше имя класса Constraint IsDOI , Symfony автоматически ищет IsDOIValidator как ConstraintValidator . Поведение по умолчанию для validateBy заключается в добавлении «Validator» к имени ограничения и поиск класса с этим именем. Поэтому, если вы не перегрузите validateBy , Symfony2 автоматически IsDOIValidator поиск IsDOIValidator .