我正在尝试为自定义验证器使用依赖性注入,以便能够使用entityManager。
我遵循了Symfony示例:依赖注入,但我一直收到这个错误消息:
FatalErrorException:错误:在中找不到类"isdoi"/home/milos/workspace/merrin3/vendor/symfony/symfoy/src/symfony/Bundle/FrameworkBundle/Validator/ConstraintValidatorFactory.php68号线
以下是我的课程:
1.IsDOI类:
<?php
namespace MerrinMainBundleValidatorConstraints;
use SymfonyComponentValidatorConstraint;
/**
* @Annotation
*/
class IsDOI extends Constraint
{
public $message_publisher_DOI = 'The Publisher DOI abbreviation does not correspond to the DOI you filled in !';
public $message_journal_DOI = 'No journal found with the DOI you filled in !';
public $journal;
public $doiAbbreviation;
public function validatedBy() {
return "isdoi";
}
public function getTargets()
{
return self::CLASS_CONSTRAINT;
}
}
2.IsDOIValidator类:
<?php
namespace MerrinMainBundleValidatorConstraints;
use DoctrineORMEntityManager;
use SymfonyComponentValidatorConstraint;
use SymfonyComponentValidatorConstraintValidator;
use SymfonyComponentDependencyInjectionContainerBuilder;
class IsDOIValidator extends ConstraintValidator
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function validate($value, Constraint $constraint)
{
$em_mdpipub = $this->entityManager('mdpipub');
//Do some tests here...
}
}
3.服务:
merrin.main.validator.isdoi:
class: MerrinMainBundleValidatorConstraintsIsDOIValidator
arguments:
entityManager: "@doctrine.orm.entity_manager"
我哪里错了?谢谢你的帮助。
您有错误的服务文件,当您添加标签和别名时,您可以使用"isdoi"名称
merrin.main.validator.isdoi:
class: MerrinMainBundleValidatorConstraintsIsDOIValidator
arguments:
entityManager: "@doctrine.orm.entity_manager"
tags:
- { name: validator.constraint_validator, alias: isdoi }
您告诉Symfony2约束的验证器类是isdoi
(validateBy method
)。但是,您的验证器是IsDOIValidator
。
您必须使用:
public function validateBy()
{
return "IsDOIValidator";
}
但是,如果您的Constraint
类名是IsDOI
,Symfony将自动查找IsDOIValidator
作为ConstraintValidator
。validateBy
的默认行为是将"Validator"附加到约束名称,并查找具有此名称的类。因此,如果不重载validateBy
,Symfony2将自动搜索IsDOIValidator
。