2016-03-25 9 views
2

は、私は、コールバックバリデータおよび/またはゲッターを使いたいが、すべては、単純なエンティティでスキップ:Symfony 3/Doctrine 2:なぜバリデータがスキップされましたか?

AppBundle /エンティティ/ Page.php:

実行
public static function loadValidatorMetadata(ClassMetadata $metadata) 
{  
    $metadata->addConstraint(new Assert\Callback('validate')); 

    $metadata->addGetterConstraint('passwordLegal', new Assert\IsTrue(array(
     'message' => 'The password cannot match your first name', 
    ))); 

} 

public static function validate($object, ExecutionContextInterface $context) 
{ 
    die('validate'); 
} 

public function isPasswordLegal() 
{ 
    die('isPasswordLegal'); 
} 

loadValidatorMetadataが、validateisPasswordLegalません。どうして?検証が有効です。

config.yml:

validation:  { enabled: true, enable_annotations: true } 

私はvalidation.ymlを試してみました:

AppBundle\Entity\Page: 
constraints: 
    - Callback: [validate] 

ありがとうございました。

+1

はどのように検証をトリガーしていますか?フォーム提出ですか?検証?エンティティを保存しますか? –

+0

Doctrineエンティティによるフォーム提出 – Vandorr

答えて

0

私は自分自身に作業コードを見つけました:

public static function loadValidatorMetadata(ClassMetadata $metadata) 
{ 
    $callback = function ($object, ExecutionContextInterface $context) { 
     $context->buildViolation($object->getTemplate().' sounds totally fake!') 
     //->atPath('template') //Global or Field error 
     ->addViolation(); 
    }; 

    $metadata->addConstraint(new Assert\Callback($callback)); 
} 

は、エンティティでこれを置く:Yourbundle/Entity/EntityName.php

関連する問題