代码之家  ›  专栏  ›  技术社区  ›  Brant Messenger

使用Zend Framework验证日期是否大于或等于今天的日期验证程序

  •  3
  • Brant Messenger  · 技术社区  · 14 年前
    $form = new Zend_Form();
    
    $mockDate = new Zend_Form_Element_Text('mock');
    
    $mockDate->addValidator(???????);
    
    $form->addElements(array($mockDate));
    
    $result = $form->isValid();
    
    if ($result) echo "YES!!!";
    else echo "NO!!!";
    

    假设元素采用日期格式。如何确定给定的日期大于或等于今天?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Luiz Damim    14 年前

    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 用于日期本地化和其他好处。

    要创建自定义验证,请查看 writing validators 来自Zends手册。

        2
  •  2
  •   vivanov    9 年前

    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;
    }
    

        3
  •  0
  •   Community SushiHangover    12 年前
    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;
        }
    }