2011-12-05 22 views
1

私はtutorialを読んでいると私は理解しないいくつかの部分があります。symfonyの2カスタム制約

public function validatedBy() 
{ 
    return 'validator.unique'; 
} 

が、これは良い方法ですか私は(docsから)get_class($this).'Validator'のsymfonyのデフォルトを使用する必要がありますが

public function requiredOptions() 
{ 
    return array('entity', 'property'); 
} 

public function targets() 
{ 
    return self::PROPERTY_CONSTRAINT; 
} 

上記の方法は必要ですか?それは私が代わりに完全修飾クラス名の、%my.validator.unique.class%を使用できるように、単純にそのパラメータ宣言であるdocs

# MyApp/MyBundle/Resources/config/services.yml 
parameters: 
    my.validator.unique.class:  MyApp\MyBundle\Validator\UniqueValidator 

services: 
    my.validator.unique: 
     class:  %my.validator.unique.class% 
     arguments: [@doctrine.orm.entity_manager] 
     tags: 
      - { name: validator.constraint_validator, alias: validator.unique } 

に表示されませんか?

name & alias。私はnameが制約の「タイプ」であると言うことができますか? aliasConstraint::validatedBy()

# Extension class 
public function getAlias() { 
    return 'my'; 
} 

で使用される別名が必要な上にありますか?私はどこでも使用されるmyを見ない?

// get the existing registered namespaces for validator annotations 
$namespaces = $container->getParameter('validator.annotations.namespaces'); 
// add our namespace under the alias myvalidation 
$namespaces['myvalidation'] = 'MyApp\\MyBundle\\Validator\\'; 
// save it 
$container->setParameter('validator.annotations.namespaces', $namespaces); 

それはちょうど@AnnotationConstraintクラスの作品に思えますか? validator.annotations.namespacesは、単純なクラス名を返すことはバリデータがnew $classname()ような単純なものを使用して、それを作成しようとしますので、あなたのバリデータクラスは、任意の依存関係を持っていない場合にのみ動作します、->validatedBy()方法について非existantのparam

答えて

2

に関するエラーが発生します。サービス名を使用した場合の唯一の問題(実際に問題がある場合)は、制約をFrameworkBundleに結合することです。

デフォルトでは->getRequiredOptions()メソッドは空です。必要なオプションがある場合は、このメソッドをオーバーライドすることも有効です。

->getTargets()の方法の既定値は、すでにself::PROPERTY_CONSTRAINTです。制約をクラス全体で機能させたい場合にのみ、オーバーライドする必要があります(両方の場合に制約が働くようにするには、配列を返すこともできます)。

サービス定義では、%my.validator.unique.class% parameter to store the class name for the my.validator.unique`サービスの使用を選択しました。

->getName()メソッドについては、Extensionインターフェイスの一部です。 app/config/config.ymlmyキーの下にオプションを追加する場合は、->load()メソッドの最初の引数として渡されます。

タグのnameは、FrameworkBundleによってすべての制約検証サービスを検索し、ConstraintValidatorFactory(特定の制約に対して正しい検証ツールを返す部分)に登録されます。 aliasは、->validatedBy()メソッドで返された文字列と同じ文字列である必要があります。

あなたが正しいです、名前空間登録のものは必要ありません。