CakePHP1.1の話。
CakePHPはModelでvalidate機能が使えるので、データベースに値を入れるときにはModel->validates($value)をするだけで値のチェックをしてくれるので非常に楽。ただ、コントローラーのメソッドに対する引数などの値を検証する場合にはどうしても今まで通りのphpでの検証になってしまう。これがまた面倒だなぁ〜と思ったので、ZendFrameworkの力を借りることにした。
ちなみに、Validatorという名前にしているのは、Validateだとコンポーネントとして使うときに、$this->Validateとなってしまい、$this->validates($value)などのコントローラーでのバリデート実装のときに紛らわしいからです。
<?php // vendorsディレクトリに入っていること // 必要に応じてZend_Validateクラスを追加してください vendor('include_path_vendors'); vendor('zend/Validate/Alnum'); vendor('zend/Validate/Alpha'); vendor('zend/Validate/Between'); vendor('zend/Validate/Int'); vendor('zend/Validate/EmailAddress'); vendor('zend/Validate/Float'); /** * バリデーション用コンポーネント * */ class ValidatorComponent extends Object{ var $controller = null; var $validator = null; function startup(&$controller){ $this->controller =& $controller; } /** * アルファベットもしくは数字であるか検証する * * @param mixed $string * @return bool アルファベットと数字のみならtrue、違えばfalse */ function is_alnum($string){ $this->validator = new Zend_Validate_Alnum(); return $this->validator->isValid($string); } /** * アルファベットかどうか検証する * * @param string $string * @return bool アルファベットならtrue、違えばfalse */ function is_alpha($string){ $this->validator = new Zend_Validate_Alpha(); return $this->validator->isValid($string); } /** * 整数かどうか検証する * * @param integer $integer * @return bool 整数ならばtrue、違えばfalse */ function is_int($integer){ $this->validator = new Zend_Validate_Int(); return $this->validator->isValid($integer); } /** * メールアドレスか検証する * * @param string $email * @return bool メールアドレスならばtrue、違えばfalse */ function is_email($email){ $this->validator = new Zend_Validate_EmailAddress(); return $this->validator->isValid($email); } /** * 浮動小数点型か検証する * * @param float $float * @return bool 浮動小数点型ならtrue、違えばfalse */ function is_float($float){ $this->validator = new Zend_Validate_Float(); return $this->validator->isValid($float); } /** * 指定された範囲内にあるか検証する * * @param integer $integer 検証する値 * @param integer $min 最小値 * @param integer $max 最大値 * @return bool 範囲内ならtrue、違えばfalse */ function is_between($integer, $min, $max){ $this->validator = new Zend_Validate_Between($min, $max); return $this->validator->isValid($integer); } } ?>
今のところはちゃんと使えているようですので、オッケーということで。
CakePHPは初心者なので、変な点があったら指摘してください。