我在Zend中有这个表单,用户应该设置start &某事物的结束日期。我试图使表单/字段无效,如果结束日期落后于开始日期,但它不工作。我覆盖了isValid()方法,它工作了,但现在它不工作,只是因为isValid()方法被覆盖了。
我是如何做事情的:
$req = $this->getRequest();
$form->setAction($req->getRequestUri());
if($req->isPost() && $form->isValid($req->getPost())) {
$startTime = strtotime(date($form->getValue('live_start')));
$endTime = strtotime(date($form->getValue('live_end')));
if($startTime > $endTime){
$form->live_end->addError("End time shouldn't be earlier than start time !!!");
}
如果我使用die;在if()中,它将死亡。所以如果它起作用的话。我用了各种方法,但都没用。
有谁知道为什么没有吗?
我建议你:
-
创建一个新的验证器,例如
YouApp_Validate_Date_GreaterThan
-
将其附加到live_end字段
-
重写你的表单
isValid
方法,以这样的方式
:
public function isValid($data)
{
$this->live_end->getValidator('GreaterThan')->setDate($data['live_start']);
return parent::isValid($data);
}
在您的验证器实现中,将要比较的日期设置为一个属性,以便轻松地动态设置它->setDate($yourDate)
希望能有所帮助。