2016-08-26 7 views
1

カスタムバリデーターで検証されたエンティティのクラスを取得できるかどうかを知りたいと思います。ここでカスタムバリデーターでエンティティクラスを取得

は、カスタムバリデータである:

use Symfony\Component\Validator\Constraint; 

class UniqueKey extends Constraint { 
    public $message = 'The string "%string%" is not good'; 

    public function validatedBy() { 
    return get_class($this).'Validator'; 
    } 
} 

class UniqueKeyValidator extends ConstraintValidator { 
    public function validate($value, Constraint $constraint) { 
    // I would like to get the class of the entity validated. Can I? 
    } 
} 
+0

[* Class Constraint Validator *](https://symfony.com/doc/current/validation/custom_constraint.html#class-constraint-validator)にすることはできますか? – Yoshi

答えて

1

mlwacosmos

あなたのバリデータは検証されているルートオブジェクトへのアクセス権を持っています。 次に、以下では、ルートオブジェクトへのアクセス権を持つようになる:

class UniqueKeyValidator extends ConstraintValidator { 
    public function validate($value, Constraint $constraint) { 
     // This will return the root object 
     $object = $this->context->getRoot(); 
    } 
} 

このフォーム経由であれば、ルートオブジェクトはフォームになりますし、あなたのエンティティは、フォームデータ$object->getData();

で利用できるようになります

これが役立つことを願っています。

+0

ok ...私はしようとしています.. Doctrineサービスをリポジトリにアクセスすることは可能ですか? – mlwacosmos

+0

バリデーターをサービスとして構成する方法があるようです:http://symfony.com/doc/current/validation/custom_constraint.html#constraint-validators-with-dependencies – rouflak

+0

バリデーターはサービスですが、私のエンティティにannotaitonを追加すると、サービスとして呼び出されません – mlwacosmos

0

ありませんあなたがすることはできません。 Constraintでエンティティを操作する場合は、Class制約を作成してエンティティにバインドする必要があります。

関連する問題