2015-10-14 57 views
0

我想建立一个验证器,将检查数据库的一些值。为此,我需要在服务中注入entityManager,并给我的Validation方法提供一个别名,如Symfony官方文档中所述。Symfony2自定义验证与EntityManager不工作

的问题是,通过这本书所做的一切后,我仍然得到一个错误,指出了EntityManager为空:

Catchable Fatal Error: Argument 1 passed to XXX\CommonBundle\Validator\Constraints\IsSingleEntryValidator::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /var/www/XXX/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Validator/ConstraintValidatorFactory.php on line 71 and defined

我的服务:

XXX.validators.is_single_entry: 
    class: XXX\CommonBundle\Validator\Constraints\IsSingleEntryValidator 
    arguments: 
     - "@doctrine.orm.default_entity_manager" 
    tags: 
     - { name: validator.constraint_validator, alias: single_entry_validation } 

而且验证器类:

class IsSingleEntryValidator extends ConstraintValidator 
{ 

    /** 
    * @var EntityManager 
    */ 
    protected $em; 

    /** 
    * Constructor 
    * 
    * @param EntityManager $em 
    */ 
    public function __construct(EntityManager $em) 
    { 
     $this->em = $em; 
    } 

    public function validate($value, Constraint $constraint) 
    { 
     ... 
    } 

    public function validateBy() 
    { 
     return 'single_entry_validation'; 
    } 
} 

而且使用验证器:

/** 
* @ORM\Column(name="is_primary", type="boolean", nullable=true) 
* @SiteAssert\IsSingleEntry(message="validator.single.entry") 
*/ 
protected $isPrimary; 
+2

我EntityManager的依赖被称为'@ doctrine.orm.entity_manager' ...运行'容器被称为'doctrine.orm.default_entity_manager'。如果这不是问题,那么我就像你一样卡住 - 否则看起来很完美。 – Ragdata

+0

您是否尝试清除缓存并重新启动php? – jcroll

回答

0

@Ragdata - doctrine.orm.default_entity_manager主义\ ORM \ EntityManager的

实际上有2次失误在我的代码。

Calling of validatedBy() function

这个功能应该不IsSingleEntryValidator

Method name should be diferent

我调用该方法validateBy(),但正确的函数名称应该是validatedBy()称为IsSingleEntry类中和

所以代码应该看起来l IKE在此现在:您的控制台上debug`命令,并确保你的:

IsSingleEntry

class IsSingleEntry extends Constraint 
{ 
    public $message = "The value already exists in the database"; 

    /** 
    * @return string 
    */ 
    public function validatedBy() 
    { 
     return 'single_entry_validation'; 
    } 
} 

IsSingleEntryValidator

class IsSingleEntryValidator extends ConstraintValidator 
{ 

    /** 
    * @var EntityManager 
    */ 
    protected $em; 

    /** 
    * Construct 
    * 
    * @param EntityManager $em 
    */ 
    public function __construct(EntityManager $em) 
    { 
     $this->em = $em; 
    } 

    /** 
    * Validate 
    * 
    * @param mixed $value 
    * @param Constraint $constraint 
    */ 
    public function validate($value, Constraint $constraint) 
    { 
     $oActiveExists = $this->em->getRepository('DatabaseBundle:Languages')->findOneByIsPrimary(true); 

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