【问题标题】:Symfony Inject Entity Manager to Custom ValidatorSymfony 将实体管理器注入自定义验证器
【发布时间】: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


【解决方案1】:

在您的 services.yml 中,别名拼写错误:'unqiue.email.validator' 而不是 'unique.email.validator'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2017-07-27
    • 2023-03-09
    • 2011-06-11
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多