Zend_Validateでバリデーション処理

ZendFrameworkでは、バリデーション処理のための『Zend_Validate』というクラスがあります。今日はその『Zend_Validate』について調べてみたいと思います。

バリデーションとは、フォームの入力値が『望む形になっているかどうか』を調べるための仕組みです。たとえば、値が入力されているのかどうか、その入力されている値が数字なのか文字なのか、メールアドレスの形式なのか、URLの形式なのか、フレームワークを使用せずにプログラムを組むときに結構面倒なのが、このバリデーション処理ではないでしょうか。『Zend_Validate』では、この面倒な処理を簡単にしてくれるクラスです。

『Zend_Validate』は、そのスーパークラスとして『Zend_Validate_Abstract』という抽象クラスが用意されており、これを継承して多数のバリデーションクラスが標準で用意されています。

『Zend_Validate』で用意されている標準バリデータ群を下記に表記してみます。

  • Zend_Validate_Alnum
    英数字のみで構成されているかどうか
  • Zend_Validate_Alpha
    英字のみで構成されているかどうか
  • Zend_Validate_Between
    指定された範囲内にあるかどうか
  • Zend_Validate_Ccnum
    クレジット番号として正しいかどうか
  • Zend_Validate_Date
    YYYY-MM-DD形式の日付かどうか
  • Zend_Validate_Digits
    数字のみで構成されているかどうか
  • Zend_Validate_Int
    整数型かどうか
  • Zend_Validate_Float
    浮動小数点型かどうか
  • Zend_Validate_Hex
    16進数かどうか
  • Zend_Validate_GreaterThan
    設定した最小値よりも大きいかどうか
  • Zend_Validate_LessThan
    設定した最大値よりも小さいかどうか
  • Zend_Validate_InArray
    設定した配列の中にその値が存在するかどうか
  • Zend_Validate_Hostname
    ホスト名として正しいかどうか
  • Zend_Validate_Ip
    IPアドレスとして正しいかどうか
  • Zend_Validate_EmailAddress
    メールアドレスとして正しいかどうか
  • Zend_Validate_Regex
    設定した正規表現にマッチするかどうか
  • Zend_Validate_NotEmpty
    空でないかどうか
  • Zend_Validate_StringLength
    設定した範囲内かどうか

Zend_Validateの使い方

Zend_Validateの使い方はいたってシンプルです。まず、バリデータのコンポーネントをロードして、インスタンスを生成し、チェック処理を走らせる。たったこれだけでバリデーション処理が行えます。

バリデーション処理は各コンポーネント共通の仕様になっており、『isValid()』メソッドをコールするだけです。

それでは、実際に前回作成したaddActionにZend_Validateを適用してみましょう。

1) TestController.phpの冒頭のほうに、使用するバリデーションクラスをロードしておきます。今回は、NotEmptyだけを使用しますので、NotEmpty.phpしかロードしていませんが、ほかにも使用するバリデートがあれば、全てロードしておく必要があります。

require_once ‘Zend/Validate/NotEmpty.php’;

2) addActionメソッドを修正します。

public function addAction()
 {
 //POST送信されたら
 if($this->getRequest()->isPost()){
 $title=$this->getRequest()->getParam('title');
 $content=$this->getRequest()->getParam('content');
 $error='';
 //バリデーション処理
 $titleEmpty=new Zend_Validate_NotEmpty();
 if(!$titleEmpty->isValid($title)){
 $error.="タイトル名は必須です。<br>";
 }
 $contentEmpty=new Zend_Validate_NotEmpty();
 if(!$contentEmpty->isValid($content)){
 $error.="コンテンツを入力して下さい。<br>";
 }
 //チェックOK時の処理
 if($error == ''){
 $data = array(
 'title' => $title,
 'content' => $content
 );
 //データベースにレコードを挿入
 $this->db->insert('dvd_collections',$data);
 //indexにリダイレクトします
 $this->_redirect('test/index');
 }
 //バリデーションエラー時の処理
 $this->view->assign('error',$error);
 }
 }

3) 『add.phtml』の上部(レコードの新規追加)の下のあたりに

<?=$this->error?>

を挿入します。

4) ブラウザで確認してみます。空白のまま送信ボタンをクリックします。入力エラーが表示されました。

静的メソッドを利用したバリデーション処理

Zend_Validateには、通常のインスタンスを生成する方法以外に、静的メソッド『is()』を使用する方法もありますので、その方法を調べてみたいと思います。

静的メソッドを利用したバリデーション処理は、バリデータのコンポーネントをロードして、チェック処理を走らせるだけです。この方法では、『is()』メソッドに必要な情報をすべて渡し、一度に処理を完結することが出来ます。

BOOL型=Zend_validate::(データ,バリデータ名,バリデータに渡すパラメータ);

『バリデータ名』には、コンポーネント名の最後の箇所を指定します(例:Zend_Validate_NotEmptyのNotEmptyの部分)。尚、バリデータにパラメータを渡す場合は、1つでも必ず配列にしなければなりません。

この方法は、インスタンスを生成しないため、手軽にバリデーション処理を行うことが出来ます。しかしその反面、複数のバリデータをつなげてバリデーション処理を行う『バリデータチェーン』が利用できなくなるデメリットもあります。

それでは、実際に作成してみます。今回ロードするコンポーネントは、Validate.phpです。

1) TestCotroller.phpファイルの冒頭にValidateコンポーネントをロードします。

require_once ‘Zend/Validate.php’;

2) addActionを下記のように修正します。

public function addAction()
 {
 //POST送信されたら
 if($this->getRequest()->isPost()){
 $title=$this->getRequest()->getParam('title');
 $content=$this->getRequest()->getParam('content');
 $error='';
 //静的メソッドのバリデーション処理
 if(!Zend_Validate::is($title,'NotEmpty')){
 $error.="タイトル名は必須です。<br>";
 }
 if(!Zend_Validate::is($content,'NotEmpty')){
 $error.="コンテンツを入力して下さい。<br>";
 }
 //チェックOK時の処理
 if($error == ''){
 $data = array(
 'title' => $title,
 'content' => $content
 );
 //データベースにレコードを挿入
 $this->db->insert('dvd_collections',$data);
 //indexにリダイレクトします
 $this->_redirect('test/index');
 }
 //バリデーションエラー時の処理
 $this->view->assign('error',$error);
 }
 }

3) ブラウザで確認しましたが、通常のインスタンスを生成する場合と全く同じになりました。

本日は、以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ