$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!!!";
假设元素采用日期格式。如何确定给定的日期大于或等于今天?
答案 0 :(得分: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。
答案 1 :(得分:1)
问题相当陈旧。在当前版本的ZF2中,没有必要编写新的验证器。只需添加如下过滤器/验证器:
tripadvisor_item
它完成了这项工作。还有一个名为'inclusive'的选项,如果设置为'true'(在GreaterThan的'选项'中),将允许'today'成为有效日期
答案 2 :(得分: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方法来检查日期,另一个回答用户可以评估为不可预测的值的字符串比较......