Symfony2验证特定字段的getter错误

时间:2014-11-01 22:42:59

标签: forms validation symfony

我正在使用Symfony2 validation getters验证endDate是否晚于startDate。它工作正常,但我希望错误出现在endDate字段不在整个表单之上。所有其他验证错误都出现在它验证的字段上方。有没有办法做到这一点?

我的实体中的验证部分:

/**
 * @Assert\True(message = "Invalid date")
 */
public function isDatesValid()
{
    return ($this->startDate < $this->endDate);
}

1 个答案:

答案 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
         );
    }
}

}

将此约束分配给一个或两个属性。