Symfony注入实体经理到自定义验证器 [英] Symfony Inject Entity Manager to Custom Validator

查看:251
本文介绍了Symfony注入实体经理到自定义验证器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的symfony应用程序中,我需要一个自定义的验证约束,它应该检查邮件是否唯一。
这个约束应该用作注释。



我遵循symfony食谱的指导方针,但我得到例外:



尝试从全局命名空间加载类unique.email.validator。
您是否忘记了使用语句?



这是我的唯一电子邮件约束类中的代码:

 <?php 

命名空间MyApp\AppBundle\Validator\Constraints;

使用Symfony\Component\Validator\Constraint;

/ **
* Class UniqueEmail
* @package MyApp\AppBundle\Validator\Constraints
* @Annotation
* /
class UniqueEmail extends Constraint
{
public $ message ='电子邮件已存在。

public function validatedBy()
{
return'unique.email.validator';
}
}

这是我唯一的EmailValidator的代码: / p>



 命名空间MyApp\AppBundle\Validator\Constraints; 

请使用Doctrine\ORM\EntityManager;
使用Symfony\Component\Validator\Constraint;
使用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 = $ repository-> findOneBy(array(
'email'=> $ value
));

if($ advertiser){
$ this-> context-> buildViolation($ constraint-> message)
- > addViolation();
}
}
}

最后但并非最不重要的services.yml:

 服务:
unique.email.validator:
类:MyApp\AppBundle \Validator\Constraints\UniqueEmailValidator
参数:
entityManager:@ doctrine.orm.entity_manager
标签:
- {name:validator.constraint_validator,别名:unqiue .email.validator}

有没有人有任何想法如何解决?

解决方案

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

In my symfony application i need a custom validation constraint, which should check if an email is unique. This Constraint should be used as an annotation.

I followed the guideline from the symfony cookbooks, but i get exception:

Attempted to load class "unique.email.validator" from the global namespace. Did you forget a "use" statement?

This is the code i have in my Unique Email Constraint class:

<?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';
  }
}

And this is the code from my unique 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();
      }
  }
} 

And last but not least my 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 }

Does anyone have any idead how to solve it?

解决方案

In your services.yml the alias is misspelled: 'unqiue.email.validator' instead of 'unique.email.validator'

这篇关于Symfony注入实体经理到自定义验证器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆