[Zend Framework] Zend_Validate: 独自のバリデーションを作成する
独自のバリデーションを作成する方法について調べたのでまとめておきます。
こちらのカスタムバリデーションを設置してみます。
<?php
//require_once 'Zend/Validate/Abstract.php';
class My_Validate_CompareDate 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;
}
}
<?php
require_once 'My/Validate/CompareDate.php';
class IndexController extends Zend_Controller_Action
{
こちらを参考にコントローラに書いて、使ってみます。
// 検証用データ
$startTime = new Zend_Date('2010.08.01');
// $endTime = $startTime->add(1, Zend_Date::MONTH);
// 自作バリデータをインスタンス化
$v = new My_Validate_CompareDate();
// 検証でエラー判定されたら
if (!$v->isValid($startTime)) {
foreach ($v->getMessages() as $key => $value) {
echo "$key : $value<br />\n";
}
}
dateInvalid : '2010/08/01 0:00:00' is not greater than today
補遺
validする値以外を指定する方法が、まだいまいち理解できていないので、機会があれば下記を確認。
日付の比較とか。