在自定义验证器中获取实体管理器

时间:2016-08-26 13:21:46

标签: validation symfony

我想知道是否有可能让实体经理在自定义验证器中访问存储库。

我尝试将验证器声明为服务并提供" @ 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 }

1 个答案:

答案 0 :(得分:3)

是的,你可以register validator as a service。 Symfony将首先检查服务容器何时创建验证器的实例。

只是你可能忘了添加适当的标签

Symfony的文档示例:

services:
    validator.contains_alphanumeric:
        class: AppBundle\Validator\Constraints\ContainsAlphanumericValidator
        tags:
            - { name: validator.constraint_validator }