から始まるsymfony 2.4あなたは必要なものを達成するためにExpression検証制約を使用することもできます。私は、これを行う最も簡単な方法だと信じています。確かにコールバック制約よりも便利です。
は、ここでは、検証の制約のアノテーションを使用してモデルクラスを更新することができる方法の例です:
use Symfony\Component\Validator\Constraints as Assert;
class Conference
{
/**
* @var \DateTime
*
* @Assert\Expression(
* "this.startDate <= this.endDate",
* message="Start date should be less or equal to end date!"
*)
*/
protected $startDate;
/**
* @var \DateTime
*
* @Assert\Expression(
* "this.endDate >= this.startDate",
* message="End date should be greater or equal to start date!"
*)
*/
protected $endDate;
}
は、プロジェクトの設定でenable annotationsすることを忘れないでください。
expression syntaxを使用すると、さらに複雑な検証をいつでも行うことができます。
class Conference
{
//...
/**
* @Assert\IsTrue(message = "Startime should be lesser than EndTime")
*/
public function isStartBeforeEnd()
{
return $this->getStartDate() <= $this->getEndDate;
}
//...
}
参照、documentationとおり
@ Psykehoeの答えは答えではなくコメントでなければならないので、ここで彼のコメントを言い換えてください。 'addViolationAtSubPath'はバージョン2.2以降、非推奨です。代わりに[addViolationAt](http://api.symfony.com/2.3/Symfony/Component/Validator/ExecutionContextInterface.html#method_addViolationAt)を使用してください。 – astorije