Я создал специальный валидатор, чтобы проверить, нет ли электронной почты в двух таблицах базы данных.Doctrine EntityManager не вводится в пользовательский валидатор
namespace AgriHealth\AhpBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class UniqueEmailAll extends Constraint
{
public $message = 'This email is already in use';
public function validatedBy()
{
return get_class($this).'Validator';
}
}
namespace AgriHealth\AhpBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class UniqueEmailAllValidator extends ConstraintValidator
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function validate($value, Constraint $constraint)
{
$find1 = $this->entityManager->getRepository('AgriHealthAhpBundle:Vet')->findOneByEmail($value);
$find2 = $this->entityManager->getRepository('AgriHealthAhpBundle:Farmer')->findOneByEmail($value);
if ($find1 || $find2) {
// If you're using the new 2.5 validation API (you probably are!)
$this->context->buildViolation($constraint->message)
->addViolation();
}
}
}
Я пытаюсь привнести Doctrine Entity менеджер в валидатор, как так:
services:
validator.unique.UniqueEmailAll:
class: AgriHealth\AhpBundle\Validator\Constraints\UniqueEmailAllValidator
arguments:
entityManager: "@doctrine.orm.entity_manager"
tags:
- { name: validator.constraint_validator, alias: UniqueEmailAllValidator }
Но это не похоже на работу:
Catchable Ошибка: Аргумент 1 передается to AgriHealth \ AhpBundle \ Validator \ Constraints \ UniqueEmailAllValidator :: __ construct() должен быть экземпляром AgriHealth \ AhpBundle \ Validator \ Constraints \ EntityManager, не указанным, вызываемым в/home/jochen/projects/ahp/trunk/vendor/symfony/Symfony/SRC/Symfony/Bundle/FrameworkBundle/Оценщик/Constra intValidatorFactory.php по линии 71 и определены в /home/jochen/projects/ahp/trunk/src/AgriHealth/AhpBundle/Validator/Constraints/UniqueEmailAllValidator.php линии 18
Что мне не хватает? В config.yml я не уверен, что служба должна быть вызвана. В Cookbook говорится о префиксе validator.unique, но я не понимаю, к чему относится уникальный?