我想知道是否有可能让实体经理在自定义验证器中访问存储库。
我尝试将验证器声明为服务并提供" @ doctrine.orm.default_entity_manager"参数。
但当然它不起作用,因为当我在实体中添加验证器作为注释时,显然我不会调用该服务。
有没有办法在我的自定义验证器中访问存储库,我通过实体中的注释进行调用以进行验证?
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator
class UniqueKeyValidator extends ConstraintValidator {
public function validate($value, Constraint $constraint) {
$entity = $this->context->getRoot()->getData();
... calling entity repository .....
}
}
我的服务:
app.validator.unique:
class: MyBundle\Validator\Constraints\UniqueKeyValidator
arguments: ["@doctrine.orm.default_entity_manager"]
tags:
- { name: validator.constraint_validator }
答案 0 :(得分:3)
是的,你可以register validator as a service。 Symfony将首先检查服务容器何时创建验证器的实例。
只是你可能忘了添加适当的标签
Symfony的文档示例:
services:
validator.contains_alphanumeric:
class: AppBundle\Validator\Constraints\ContainsAlphanumericValidator
tags:
- { name: validator.constraint_validator }