[Zend Framework] Zend_Validate: 独自のバリデーションを作成する

独自のバリデーションを作成する方法について調べたのでまとめておきます。

[markdown]

> * [標準のバリデーションクラス群 – Zend_Validate – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.validate.set.html)
> * [バリデータの書き方 – Zend_Validate – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.validate.writing_validators.html)

こちらのカスタムバリデーションを設置してみます。

> * [Date validator that validates if the date is greater than or equal to today with Zend Framework – Stack Overflow](http://stackoverflow.com/questions/2232949/date-validator-that-validates-if-the-date-is-greater-than-or-equal-to-today-with)

“`php:library/My/Validate/CompareDate.php
“‘%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:application/controllers/IndexController.php
* [Zend Framework – Zend_Validate編](http://doremi.s206.xrea.com/zend/ref/zend_validate.html)

“`php:application/controllers/IndexController.php
// 検証用データ
$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
\n”;
}
}
“`

“`:結果
dateInvalid : ‘2010/08/01 0:00:00’ is not greater than today
“`

## 補遺

validする値以外を指定する方法が、まだいまいち理解できていないので、機会があれば下記を確認。

> * [php – Zend Form Validate Range Date – Stack Overflow](http://stackoverflow.com/questions/6387792/zend-form-validate-range-date)
> * [Open Programming Laboratory – Zend_Formのフィールド比較バリデータの作成](http://www.oplabo.jp/article/22)

日付の比較とか。

> * [基本メソッド – Zend_Date – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.date.basic.html)
> * [Zend_Date API の概要 – Zend_Date – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.date.overview.html)

[/markdown]