Symfony 2 UniqueEntity约束验证器

时间:2012-08-22 14:17:57

标签: validation symfony-2.1

有人可以解释为什么UniqueEntity 约束类定义:

// ...

public $service = 'doctrine.orm.validator.unique';

public function validatedBy()
{
    return $this->service;
}

//...

而不仅仅是:

public function validatedBy()
{
    return "UniqueEntityValidator";
}

UniqueEntityValidator类存在并具有所需的所有逻辑。这里的服务点是什么?

我问这个是因为现在由于某些依赖性,我不能在Symfony框架之外使用UniqueEntity。

1 个答案:

答案 0 :(得分:5)

如此recipe for the Validator component中所述,validatedBy()会返回别名,而不是直接返回服务。这允许您在DIC中配置自己的Validator服务:

services:
validator.unique.your_validator_name:
    class: Fully\Qualified\Validator\Class\Name
    tags:
        - { name: validator.constraint_validator, alias: doctrine.orm.validator.unique }

由于此UniqueEntity约束是桥的一部分,这意味着您应该在Symfony2上下文中使用它。这就是为什么你不能在框架之外真正使用它。

但您可以将此service值更改为类名。属性是公共的:https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntity.php,根据上面给出的文档,它将起作用。