2017-11-21 9 views
1

私のエンティティのプロパティにAssert \ Expressionを追加したいと思います。 選択した「有効日」(this.getEffective())が過去または今日にあるときに、エラーメッセージがポップアップするはずです。私はちょうど今日、今日の日付と比較する方法を把握することはできません。 Symfony Assert Expression今日の日付とエンティティプロパティを比較します

/** 
* @var boolean 
* @ORM\Column(type="boolean", nullable=true) 
* @Assert\Expression(
*  "this.getEffective() > today", 
*  message="The effective date must be in the future!") 
*/ 
private $status_stealth; 

私は または datetime.now()と同じしようと、私はたくさんの周りグーグルをしましたが、私は誰かが実際に現在の日付内で別の値を比較したものを発見していませんアサート式。

アイデア?

答えて

1

あなたが今日の日付時刻を返しますあなたのエンティティの新しいメソッドを定義して、式にすることができますが、あなたの比較デフォルトで

/** 
* @var boolean 
* @ORM\Column(type="boolean", nullable=true) 
* @Assert\Expression(
*  "this.getEffective() > this.getCurrentDate()", 
*  message="The effective date must be in the future!") 
*/ 
private $status_stealth; 

public function getCurrentDate(){ 
    return new \DateTime(); 
} 
+0

「DateTimeImmutable」を使用する方が優れています。 –

+0

@OlegBelostotskyどのように動作しますか? – sonja

+0

@M Khalid Junaid、status_stealthが実際にチェックされているかどうかも確認できますか? こう言っています: "this.getStatusStealth()== trueとthis.getEffective()> this.getCurrentDate()" まだ動作していませんが、なぜそれができないのか分かりません – sonja

0

を行い、式の構文は、一つだけの機能、constant()をサポートしています。次に、式バリデータには1つまたは2つの変数(検証値とコンテキストオブジェクト)が付属します。エンティティの検証メソッドに値を渡すことができます。

/** 
* @Assert\Expression(expression="this.isStatusValid(value)") 
*/ 
private $status; 

public function isStatusValid($status) { 
    $currentDate = new \DateTimeImmutable(); 
    return in_array($status, [1, 2, 3]) && $this->targetDate > $currentDate; 
} 

エラーが発生した場合は、デバッグしてください。

public function isStatusValid($status) { 
    $currentDate = new \DateTimeImmutable(); 
    var_dump($this->targetDate); 
    var_dump($currentDate); 
    die(); 
    return in_array($status, [1, 2, 3]) && $this->targetDate > $currentDate; 
} 

ドキュメントへのリンク:Expression ConstraintExpression Syntax

関連する問題