2016-08-26 15 views
0

エンティティマネージャがカスタムバリデータのリポジトリにアクセスできるようになるかどうかを知りたいですか?カスタムバリデータでエンティティマネージャを取得

バリデータをサービスとして宣言し、 "@ doctrine.orm.default_entity_manager"引数を与えようとしました。

もちろん、エンティティの注釈としてバリデーターを追加すると、サービスが呼び出されないため、もちろん機能しません。

検証するエンティティの注釈で呼び出したカスタムバリデータのリポジトリに到達する方法はありますか?

use Symfony\Component\Validator\Constraint; 
use Symfony\Component\Validator\ConstraintValidator 

class UniqueKeyValidator extends ConstraintValidator { 
    public function validate($value, Constraint $constraint) { 
    $entity = $this->context->getRoot()->getData(); 
    ... calling entity repository ..... 
    } 
} 

マイサービス:

app.validator.unique: 
    class: MyBundle\Validator\Constraints\UniqueKeyValidator 
    arguments: ["@doctrine.orm.default_entity_manager"] 
    tags: 
     - { name: validator.constraint_validator } 
+0

は、あなたのバリデータのコードを投稿することができますか?設定が含まれています – Matteo

答えて

2

はい、できますregister validator as a service。そして、Symfonyはバリデータのインスタンスを作成するときにサービスコンテナを最初にチェックします。

ちょうどあなたはおそらくsymfonyのドキュメントから適切なタグに

例を追加するのを忘れています:

services: 
    validator.contains_alphanumeric: 
     class: AppBundle\Validator\Constraints\ContainsAlphanumericValidator 
     tags: 
      - { name: validator.constraint_validator } 
+0

タグでも動作しません:UniqueKeyValidator :: __ construct()に渡された引数1はDoctrine \ ORM \ EntityManagerのインスタンスでなければなりません。 – mlwacosmos

+0

doctrineを渡す適切な設定で 'arguments'プロパティを追加しました。サービスの設定?私が提示したSymfonyの文書の例はそれを含んでいません。バリデーターをサービスとして登録する方法のみを示しています。 –

+1

答えはそこにあるようですhttp://stackoverflow.com/questions/14371267/custom-constraint-validator-with-database-connection-dependency-symfony2 – mlwacosmos

関連する問題