2012-08-22 62 views
1

有人能解释我为什么UniqueEntity 约束类定义:Symfony的2 UniqueEntity约束验证

// ... 

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

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

//... 

,而不是简单:

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

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

我在问这个,因为现在我不能在Symfony框架之外使用UniqueEntity,因为有些依赖关系。

+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,根据上面给出的文档,它将起作用。