2016-10-19 9 views
1

では動作しません。私はアサート LessThanOrEqualとアサートレンジ日時

$user->setMyDate(new \DateTime('tomorrow')); 

と私のエンティティに

/** 
* @var \DateTime 
* @Assert\NotBlank() 
* @Assert\LessThanOrEqual("today") 
* @Assert\Range(
*  min = "now", 
*  max = "now" 
*) 
* @Assert\DateTime() 
* @ORM\Column(name="my_date", type="datetime", precision=0, scale=0, nullable=false, unique=false) 
*/ 
private $my_date; 
を持って私のコントローラで Symfony\Component\Validator\ConstraintsとDoctrine

と私の日付を検証します

LessThanOrEqualとRangeで試しましたが、動作しません。

+0

あなたはどこでもバリデータを呼び出していますか? – qooplmao

+0

どこからでも意味がありますか?私が$ user-> setMyDate( 'foo')を変更した場合。私はエラーがある、それは日時ではない。 **更新**申し訳ありません、今私はそれを – monkeyUser

答えて

0

Isそれは質問ですか、それとも声明ですか? いいえ、そうではありません。

制約のいずれかが初期化されると、渡されたオプションと比較する値が取得されます。あなたの場合、それは "今日"または "今"の文字列です。

したがって、制約が適用されると、文字列は\ DataTimeオブジェクトと比較され、明らかに動作しません。

しかし、必要なものを得るには、カスタム制約を作成するだけです。このような

何か:

class RageDateTime extends Range 
{ 
    public $min; 
    public $max; 

    public function __construct($options = null) 
    { 
     parent::__construct($options); 
     $this->max = new \DateTime($this->max); 
     $this->min = new \DateTime($this->min); 
    } 

    public function validatedBy() 
    { 
     return 'RangeValidator'; 
    }   
} 
+0

あなたの返信に感謝しますが、ドキュメントhttp://symfony.com/doc/current/reference/constraints/LessThanOrEqual.html#comparing-datesとは違う – monkeyUser