2010-02-09 3 views
3
$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!!!"; 

요소가 날짜 형식으로 간주됩니다. 주어진 날짜가 오늘보다 크거나 같다고 어떻게 결정합니까?날짜가 Zend Framework의 오늘보다 크거나 같은지 확인하는 날짜 유효성 검사기

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

그리고 요소에 추가 :

답변

6

이 작업을 수행 할 수있는 간단한 유효성 검사기를 만들 수 있습니다

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

당신은 아마 날짜의 현지화 및 추가에 대한 Zend_Date와 날짜를 확인하려면 은혜.

사용자 정의 유효성을 만들려면 Zend의 설명서에서 writing validators을보십시오. 날짜를 확인하기 위해 표준화 된 Zend_Date 방법을 사용하기 때문에 더 나은

+0

감사합니다. 정말 잘됐다! –

+0

'보다 크거나 같지 않음'은 '<='이어야합니다. – surfer190

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

, 다른 awsner 사용자 impredictable 값으로 평가할 수있는 문자열 비교 ...

+1

귀하의 게시물에 "왜"더 좋은지에 대한 설명이 포함되어 있어야합니다. – LarsTech

+0

Zend_Date에 포함시킬 다른 파일을 방금 추가 한 것은 좋지 않습니다. Zend_Date가 뭐라고 생각하니? –

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

그리고 제대로 작동합니다. 또한 '포함'이라는 옵션이 있는데 'true'(GreaterThan의 'options')로 설정하면 'today'가 유효한 날짜가됩니다.