2016-11-17 13 views
1

カスタムコンストラクタの検証をエンティティの1つに設定しようとしていますが、コンストラクトの検証では、フィールドをチェックして検証するためにデータテーブルをチェックする必要があります。エンティティのサービスとしてのカスタム制約の検証

私はこのリンクの後に続きます:https://symfony.com/doc/2.8/validation/custom_constraint.htmlしかし、YAMLを使ってエンティティにconstraitバリデーションを設定する方法はわかりません。

constrait検証をクラスとして設定すると、symfonyはそのクラスがEntityManagerのインスタンスを渡す必要があるというエラーを返します。

namespace Acme\BundleibBundle\Validator\Constraints; 

use Doctrine\ORM\EntityManager; 
use Symfony\Component\Validator\Constraint; 
use Symfony\Component\Validator\ConstraintValidator; 

class IsNotDayOff extends ConstraintValidator 
{ 
    private $em; 

    public $message = 'Impossible the send this day.'; 

    public function __construct(EntityManager $entityManager) 
    { 
     $this->em = $entityManager; 
    } 

    public function validate($value, Constraint $constraint) 
    { 
     $repository = $em->getRepository('AcmeRibBundle:DayOff'); 

     $isDayOff = $repository->findOneByDate($value); 

     if ($isDayOff) { 
      $this->context->buildViolation($constraint->message) 
       ->addViolation(); 

     } 
    } 
} 

そして、ここに私のサービスの設定:

validator.is_not_day_off: 
    class: Acme\Bundle\RibBundle\Validator\Constraints\IsNotDayOff 
    attributes: 
     - "@doctrine.orm.entity_manager" 
    tags: 
     - { name: validator.constraint_validator, alias: "validator.is_not_day_off" } 

私もこれを試してみてください。

は、ここに私のバリデータである

validation.yml 
Acme\Bundle\RibBundle\Entity\Address: 
     properties: 
      deliveryDate: 
       - validator.is_not_day_off: ~ 

しかし、あまりにもスローと例外。

help pls?

+0

だけを宣言する必要があなたのサービス設定で 'attributes'を' arguments'に置き換えてください。 – Timurib

+1

はい、間違いでしたが、エラーは継続します –

+0

制約戻りのvalidateBy()メソッドとは何ですか? Symfonyのどのバージョンを使用していますか? – Timurib

答えて

2

バリデータがあるだけで、あなたのプロパティの制約として適用しようとしているようです。

あなたはdistinctsクラスに持っている必要があります。

validation.ymlに表示されます

あなたの制約

class IsNotDayOff extends Constraint 
{ 
    public $message = 'your error message'; 

    public function validatedBy() 
    { 
     //return your validator class 
    } 
} 

ごバリあなたはservices.ymlにサービスとして

class IsNotDayOffValidator extends ConstraintValidator 
{ 
    //your own logic... 
} 
+0

あなたは正しいです!私は昨日それをして完全に動作します。ありがとう! –

関連する問題