【发布时间】:2015-04-11 13:47:41
【问题描述】:
在我的 symfony 应用程序中,我需要一个自定义验证约束,它应该检查电子邮件是否唯一。 此约束应用作注释。
我遵循了 symfony 食谱中的指南,但我得到了例外:
尝试从全局命名空间加载类“unique.email.validator”。 您是否忘记了“使用”声明?
这是我的唯一电子邮件约束类中的代码:
<?php
namespace MyApp\AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* Class UniqueEmail
* @package MyApp\AppBundle\Validator\Constraints
* @Annotation
*/
class UniqueEmail extends Constraint
{
public $message = 'The Email already exists.';
public function validatedBy()
{
return 'unique.email.validator';
}
}
这是来自我独特的 EmailValidator 的代码:
namespace MyApp\AppBundle\Validator\Constraints;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class UniqueEmailValidator extends ConstraintValidator
{
/**
* @var EntityManager
*/
protected $em;
public function __construct(EntityManager $entityManager)
{
$this->em = $entityManager;
}
public function validate($value, Constraint $constraint)
{
$repository = $this->em->getRepository('AppBundle:Advertiser');
$advertiser = $repository->findOneBy(array(
'email' => $value
));
if ($advertiser) {
$this->context->buildViolation($constraint->message)
->addViolation();
}
}
}
最后但并非最不重要的是我的 services.yml:
services:
unique.email.validator:
class: MyApp\AppBundle\Validator\Constraints\UniqueEmailValidator
arguments:
entityManager: "@doctrine.orm.entity_manager"
tags:
- { name: validator.constraint_validator, alias: unqiue.email.validator }
有人知道如何解决吗?
【问题讨论】:
-
使用“app/console container:debug unique.email.validator”来验证您的服务文件是否正在加载。
-
你真的必须在你的 UniqueEmail 类中添加validateBy() 函数吗?我的理解是没有必要symfony.com/doc/master/validation/…
标签: symfony doctrine entity entitymanager inject