2010-02-09 101 views

回答

6

您可以創建一個簡單的校驗做到這一點:

class My_Validate_DateGreaterThanToday extends Zend_Validate_Abstract 
{ 
    const DATE_INVALID = 'dateInvalid'; 

    protected $_messageTemplates = array(
     self::DATE_INVALID => "'%value%' is not greater than or equal today" 
    ); 

    public function isValid($value) 
    { 
     $this->_setValue($value); 

     $today = date('Y-m-d'); 

     // expecting $value to be YYYY-MM-DD 
     if ($value < $today) { 
      $this->_error(self::DATE_INVALID); 
      return false; 
     } 

     return true; 
    } 
} 

,並將其添加到元素:

$mockDate->addValidator(new My_Validate_DateGreaterThanToday()); 

你可能想用Zend_Date檢查日期日期的本地化和進一步好處。

要創建自定義驗證,請查看Zend手冊中的writing validators

+0

謝謝。它效果很好! – 2010-02-15 19:23:03

+0

對於'不大於或等於'應該是'<=' – surfer190 2014-02-21 08:28:18

0
class My_Validate_DateGreaterThanToday extends Zend_Validate_Abstract 
{ 
    const DATE_INVALID = 'dateInvalid'; 

    protected $_messageTemplates = array(
     self::DATE_INVALID => "'%value%' is not greater than today" 
    ); 

    public function isValid($value) { 
     $this->_setValue($value); 

     $date = new Zend_Date($value); 
     $date->addDay(1); 
     $now = new Zend_Date(); 

     // expecting $value to be YYYY-MM-DD 
     if ($now->isLater($date)) { 
      $this->_error(self::DATE_INVALID); 
      return false; 
     } 

     return true; 
    } 
} 

這是更好,因爲使用了標準化的Zend_Date的運算方法來檢查日期,其他awsner用戶字符串比較可以計算到impredictable值...

+1

您的文章應該可能包含您認爲這更好的「爲什麼」的描述。 – LarsTech 2011-11-07 20:20:13

+0

這不是更好,你只是添加另一個文件,以包括Zend_Date。你認爲Zend_Date調用了什麼? – 2012-04-10 20:23:59

1

的問題是相當陳舊。在當前版本的ZF2中,不需要編寫新的驗證器。只需添加一個像這樣的過濾器/驗證程序:

public function getInputFilter() 
{ 
    if(!$this->inputFilter){ 
     $inputFilter = new InputFilter(); 
     $inputFilter->add(array(
      'name' => 'mock', 
      'validators' => array(
       array('name' => 'Date'), 
       array(
        'name' => 'GreaterThan', 
        'options' => array(
         'min' => date('Y-m-d'), 
        ), 
       ), 
      ), 
     )); 
     $this->inputFilter = $inputFilter; 
    } 
    return $this->inputFilter; 
} 

它可以完成這項工作。還有一個選項叫'包容性',如果設置爲'真'(在「選項」中的GreaterThan),將允許'今天'是有效日期