2012-05-07 5 views
1

を見つけていない、このようdocumentationで定義された私は、コールバックの検証制約を使用しています: -Symfony2の:コールバック検証制約 - オブジェクトのプロパティが

/** 
* GD\AdminBundle\Entity\Offer 
* 
* @ORM\Table(name="offers") 
* @ORM\Entity(repositoryClass="GD\AdminBundle\Repository\OfferRepository") 
* @Assert\Callback(methods={"isDateValid"}) 
*/ 
class Offer 
{ 

...

public function isDateValid(ExecutionContext $context) 
    { 
     // This code block gets executed but $this->getEndDate() is NULL 
     if($this->getEndDate()->getTimestamp() < $this->getStartDate()->getTimestamp()){ 
      $context->addViolation('End Date cannot be less than Start Date.', array(), null); 
     } 
    } 

しかし私が行った場合var_dumpとtestの結果、$this->getEndDate()NULL

です。私はSonataAdminBundleを使用して管理者から新しいオファーインスタンスを作成しています。 私はここで何が間違っていますか?

答えて

0

あなたは正しい名前空間を使用しているようです。

この2つはありますか。

+0

:) – Amit

0

あなたがこれを理解したかどうかはわかりません。しかし私は私のプロジェクトで全く同じ検証をしています。ここで私は(動作確認)しているものです:

私のエンティティで私のコールバック: * @Assert\Callback(methods={{ "CG5\BFG\CoreBundle\Validators\EndDateValidator", "isEndDateValid"}})

私のバリデータのコード(別ファイル):はい、私はそれらを持っている

namespace CG5\BFG\CoreBundle\Validators; 

use Symfony\Component\Validator\ExecutionContext; 

class EndDateValidator 
{ 
    static public function isEndDateValid($entity, ExecutionContext $context) 
    { 
     if ($entity->getEndDate() <= $entity->getStartDate()) 
      $context->addViolationAtSubPath('endDate', 'End Date must be after Start Date', array(), null); 
    } 
}