我正在使用Symfony2 validation getters验证endDate
是否晚于startDate。它工作正常,但我希望错误出现在endDate
字段不在整个表单之上。所有其他验证错误都出现在它验证的字段上方。有没有办法做到这一点?
我的实体中的验证部分:
/**
* @Assert\True(message = "Invalid date")
*/
public function isDatesValid()
{
return ($this->startDate < $this->endDate);
}
答案 0 :(得分:2)
我认为通过吸气剂验证可以实现这一目标。
相反,您可以使用自定义约束:http://symfony.com/doc/current/cookbook/validation/custom_constraint.html
您需要覆盖 getTargets()方法才能访问所有属性:
class DateRangeConstraint extends Constraint {
public $message = 'Your message';
public function getTargets() {
return Constraint::CLASS_CONSTRAINT;
}
}
class DateRangeConstraintValidator extends ConstraintValidator {
public function validate($obj, Constraint $constraint) {
if ($obj->startDate() < $obj->endDate()) {
$this->context->addViolationAt(
'startDate',
$constraint->message,
array(),
null
);
}
}
}
将此约束分配给一个或两个属性。