2014-11-01 18 views
1

我使用Symfony2 validation getters來驗證endDate是否晚於startDate。它工作正常,但我希望錯誤出現在endDate字段不在整個表單上方。所有其他驗證錯誤出現在它驗證的字段上方。有沒有辦法做到這一點?在我的實體Symfony2驗證getters錯誤的特定字段

驗證部分:

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

回答

2

我不認爲有一種方式來實現與一個getter驗證。

相反,你可以使用自定義的約束: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 
     ); 
    } 
} 

}

分配對一個或兩個屬性的這種約束。

相關問題