忍者ブログ
自分なりの目線で情報を発信します。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Zend_Validateを使って入力チェックを行うサンプルです。
 
Zend Frameworkリファレンス (Zend_Validate)
 
■使用ファイル
  • testform.phtml 名前などの情報を入力して送信するフォーム
  • success.phtml   送信成功を伝える画面
  • testformController.php  フォームデータを処理するコントローラー
 
■メッセージ日本語化
Zend_Validateはデフォルトで日本語に対応していないので、
エラーメッセージを日本語化してしまいましょう。
この処理は常に行うため、Bootstrap.phpに日本語化処理を書きます。
 
※Bootstrapクラスに"_init"で始まるメソッドを追加するとフレームワークから実行されます。
  これを初期化処理として利用できます。
 
Bootstrapについて詳しくはこちらを。参考にさせていただきました。
 
□application/Bootstrap.phpの中
 
  1. protected function _initLang()
  2. {
  3.     // Zend_Validateのメッセージ日本語化
  4.     // 言語ファイルのロード
  5.     $translator = new Zend_Translate(
  6.                         // Arrayアダプタを使って言語定義を取得
  7.                         'array',
  8.                         // 言語リソースのパス
  9.                         realpath(APPLICATION_PATH . '/../library/languages/ja/Zend_Validate.php'),
  10.                         // 日本語ロケール
  11.                         'ja',
  12.                         // ファイル指定
  13.                         array('scan' => Zend_Translate::LOCALE_FILENAME)
  14.                       );
  15.     // デフォルトのトランスレータを設定
  16.     Zend_Validate_Abstract::setDefaultTranslator($translator);
  17. }
 
当方のZendFrameworkバージョンは、1.11.11です。
このバージョンであれば、Zend_Validateの日本語化ファイルが同梱されていました。(library/languages/ja/Zend_Validate.php)
古いバージョンの場合は、日本語化ファイルを他からもらってくる必要があります。
新しいバージョン(例えばこの1.11.11)の日本語化ファイルを使えば、
古いバージョンでも、たぶん日本語化できる気がします。

■文字列長チェック
Zend_Validateは文字列チェックの際、iconv.internal_encodingを使用します。
デフォルトのままだと'ISO-8859-1'であるため、文字列の長さを正しく判定できない可能性があります。
環境に合った適切なエンコーディングを指定しましょう。
エンコーディング指定処理を、Bootstrap.phpに書きます。
 
□application/Bootstrap.phpの中
 
  1.     protected function _initEncoding()
  2.     {
  3.         ini_set('iconv.internal_encoding', 'UTF-8');
  4.     }

 
■testform.phtml
 
  1. <html>
  2. <head>
  3.   <title>テストフォーム</title>
  4. </head>
  5. <body>
  6.   <h1>テストフォーム</h1>
  7.   <?php foreach ($this->errmsgList as $errmsg): ?>
  8.     <p><?php echo $errmsg; ?></p>
  9.   <?php endforeach; ?>
  10.   <form action="/testform/insert" method="post">
  11.     <table class="inqform_customer" summary="問い合わせ内容">
  12.       <thead></thead><tfoot></tfoot>
  13.       <tbody>
  14.         <tr>
  15.           <th>名前</th>
  16.           <td>
  17.             <input type="text" name="name" id="name" value="<?php echo $this->input['name']; ?>">
  18.           </td>
  19.         </tr>
  20.         <tr>
  21.           <th>メールアドレス</th>
  22.           <td>
  23.             <input type="text" name="email" id="email" value="<?php echo $this->input['email']; ?>">
  24.           </td>
  25.         </tr>
  26.         <tr>
  27.           <th>電話番号</th>
  28.           <td>
  29.             <input type="text" name="telno" id="telno" value="<?php echo $this->input['telno']; ?>">
  30.           </td>
  31.         </tr>
  32.       </tbody>
  33.     </table>
  34.     <input type="submit" value="送信">
  35.   </form>
  36. </body>
  37. </html>
 
名前などの情報を入力して送信するフォームです。
ここで入力された内容をtestformController.phpに送ります。
バリデーションエラーがあれば表示します。
 
 
 
■success.phtml
 
  1. <html>
  2. <head>
  3.   <title>送信完了</title>
  4. </head>
  5. <body>
  6.   <h1>送信完了</h1>
  7.   <p>送信完了しました。</p>
  8. </body>
  9. </html>
 
入力エラーがなく、送信成功を伝える画面です。
 
 
■testformController.php
 
  1. <?php
  2.  
  3. class TestformController extends Zend_Controller_Action
  4. {
  5.     private $errmsgList = array();
  6.  
  7.     // 問い合わせ内容登録
  8.     public function indexAction()
  9.     {
  10.         $input = array('name' => '', 'email' => '', 'telno' => '');
  11.         $this->view->assign('errmsgList', $this->errmsgList);
  12.         $this->view->assign('input',      $input);
  13.         $this->renderScript('testform/testform.phtml');
  14.     }
  15.  
  16.     // 問い合わせ内容登録
  17.     public function insertAction()
  18.     {
  19.         $input = array();
  20.         // リクエストパラメータ
  21.         $input['name']   = $this->getRequest()->getParam('name');
  22.         $input['email']  = $this->getRequest()->getParam('email');
  23.         $input['telno']  = $this->getRequest()->getParam('telno');
  24.  
  25.         if ($this->validate($input) === FALSE) {
  26.             // 入力チェックエラー →エラー内容を通知
  27.             $this->view->assign('errmsgList', $this->errmsgList);
  28.             $this->view->assign('input',      $input);
  29.             $this->renderScript('testform/testform.phtml');
  30.             return;
  31.         }
  32.  
  33.         $this->renderScript('testform/success.phtml');
  34.     }
  35.  
  36.     // 入力値のバリデーション成否を返す
  37.     private function validate($data)
  38.     {
  39.         $errmsg  = array();
  40.  
  41.         $validator = new Zend_Validate();
  42.         $validator->addValidator(new Zend_Validate_StringLength(array('max' => 128)))
  43.                   ->addValidator(new Zend_Validate_NotEmpty());
  44.         if ($validator->isValid($data['name']) === FALSE) {
  45.             foreach ($validator->getMessages() as $msgId => $msg) {
  46.                 $errmsg[] = $msg;
  47.             }
  48.         }
  49.  
  50.         $validator = new Zend_Validate();
  51.         $validator->addValidator(new Zend_Validate_StringLength(array('max' => 320)))
  52.                   ->addValidator(new Zend_Validate_NotEmpty())
  53.                   ->addValidator(new Zend_Validate_EmailAddress());
  54.         if ($validator->isValid($data['email']) === FALSE) {
  55.             foreach ($validator->getMessages() as $msgId => $msg) {
  56.                 $errmsg[] = $msg;
  57.             }
  58.         }
  59.  
  60.         $validator = new Zend_Validate();
  61.         $validator->addValidator(new Zend_Validate_StringLength(array('max' => 11)))
  62.                   ->addValidator(new Zend_Validate_NotEmpty())
  63.                   ->addValidator(new Zend_Validate_Digits());
  64.         if ($validator->isValid($data['telno']) === FALSE) {
  65.             foreach ($validator->getMessages() as $msgId => $msg) {
  66.                 $errmsg[] = $msg;
  67.             }
  68.         }
  69.  
  70.         if (count($errmsg) > 0) {
  71.             $this->errmsgList = $errmsg;
  72.             return FALSE;
  73.         }
  74.  
  75.         return TRUE;
  76.     }
  77. }
  78.  
  79. // end of file
 
バリデーションチェックには、以下クラスを使っています。
Zend_Validate_StringLength(文字列長チェック)
Zend_Validate_NotEmpty(必須チェック)
Zend_Validate_EmailAddress(メールアドレス形式チェック)
Zend_Validate_Digits(数字チェック)
 
バリデーションクラスについては、詳しくはこちらをどうぞ。
 
□各項目のバリデーションルール
 <名前>
  •   最大128文字
  •   必須
  1. $validator->addValidator(new Zend_Validate_StringLength(array('max' => 128)))
  2.           ->addValidator(new Zend_Validate_NotEmpty());
 
 <メールアドレス>
  •   最大320文字
  •   必須
  •   メールアドレス形式
  1. $validator->addValidator(new Zend_Validate_StringLength(array('max' => 320)))
  2.           ->addValidator(new Zend_Validate_NotEmpty())
  3.           ->addValidator(new Zend_Validate_EmailAddress());
 
 <電話番号>
  •   最大11文字
  •   必須
  •   数字のみ
  1. $validator->addValidator(new Zend_Validate_StringLength(array('max' => 11)))
  2.           ->addValidator(new Zend_Validate_NotEmpty())
  3.           ->addValidator(new Zend_Validate_Digits());

 
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
お知らせ
プロフィール
HN:
shusatoo
性別:
男性
自己紹介:
基本PHP。JavaScriptちょっとだけ。Javaをほんの少し。
おすすめ本
最新コメント
[10/09 shusatoo]
[10/09 misney]
最新トラックバック
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
ブログ内検索
カウンター
アク解アナライズ
バーコード
ビジター

Copyright © [ 開発メモるアル ] All rights reserved.
Special Template : 忍者ブログ de テンプレート
Special Thanks : 忍者ブログ
Commercial message : [PR]