我想建立一个验证器,将检查数据库的一些值。为此,我需要在服务中注入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;
我EntityManager的依赖被称为'@ doctrine.orm.entity_manager' ...运行'容器被称为'doctrine.orm.default_entity_manager'。如果这不是问题,那么我就像你一样卡住 - 否则看起来很完美。 – Ragdata
您是否尝试清除缓存并重新启动php? – jcroll