Symfony 2 UniqueEntity约束验证器

spa*_*jak 1 validation symfony-2.1

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

// ...

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

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

//...
Run Code Online (Sandbox Code Playgroud)

而不仅仅是:

public function validatedBy()
{
    return "UniqueEntityValidator";
}
Run Code Online (Sandbox Code Playgroud)

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

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

Wil*_*and 5

Validator组件的配方中所述,validatedBy()返回别名,而不是直接返回服务.这允许您Validator在DIC中配置自己的服务:

services:
validator.unique.your_validator_name:
    class: Fully\Qualified\Validator\Class\Name
    tags:
        - { name: validator.constraint_validator, alias: doctrine.orm.validator.unique }
Run Code Online (Sandbox Code Playgroud)

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

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