2012-08-22 89 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,根據上面給出的文檔,它將起作用。