最終更新: 2008-07-30 (水) 00:41:03
このページをDeliciousに追加 このページをはてなブックマークに追加 このページをlivedoor クリップに追加 このページをYahoo!ブックマークに追加

Zend Framework でバリデータに Piece_Right を使う

目次

概要

Piece_RightPiece Framework のバリデーションの部分を担当しているライブラリです。 この Piece_Right を Zend Framework に組み込み、 以下のような YAML 形式の設定ファイルに基づいて、 バリデーションを一括して行えるようにします。

- name: userid
  description: ユーザーID
  required:
    message: %_description%を入力して下さい。
  validator:
    - name: Length
      rule:
        min: 4
        max: 8
      message: %_description%は4文字以上8文字以下です。

- name: password
  description: パスワード
  ……

Zend_Validate_Interface の API に合わせてありますが、 入力値をフィルタする機能も備えているため、 機能的には Zend_Filter_Input クラスに近いです。

インストール

アーカイブをダウンロードし、 include_path の通ったディレクトリで展開して下さい。
(sample/library のような各アプリケーションの library ディレクトリや、 ZendFramework-1.5.3/library ディレクトリなどで。)

$ cd ZendFramework-1.5.3/library
$ tar xvfz Revulo_Validate_Right-0.9.tar.gz

また、その他にいくつかのライブラリをインストールする必要があります。

  • Piece_Right (Version 1.10.0 以降)
  • PEAR::Cache_Lite
  • Spyc

これらのうち Spyc 以外のライブラリは、 以下のように pear コマンドを使うことでまとめてインストールできます。

# pear channel-discover pear.piece-framework.com
# pear install piece/Piece_Right

後は Spyc のページ からアーカイブをダウンロードしてインストールして下さい。

使い方

まず、Revulo_Validate_Right クラスのオブジェクトを作成し、 どのバリデーションのルールを用いるかを setValidationSetName() メソッドで指定します。

$validator = new Revulo_Validate_Right();
$validator->setValidationSetName('Login');

そうしたら、isValid() メソッドを呼んで下さい。 入力値に対するフィルタ処理とバリデーションがまとめて行われ、 全てのバリデーションに成功した場合には true が返ってきます。

if ($validator->isValid($_POST) === true) {
    ......
}

必要であれば、フィルタされた値やエラーメッセージを取得し、 ビュースクリプトに渡すこともできます。

$values = $validator->getValues();
$errors = $validator->getMessages();

$this->view->assign($values);
$this->view->errors = $errors;

基本的な使い方はほぼこれだけです。 より具体的な使い方については、付属のサンプルのコードを見て下さい。

設定

バリデータのオプション

設定可能なオプションは以下の通りです。

configDirectory
バリデーション定義ファイルを置くディレクトリ
(デフォルト値: config/validations)
cacheDirectory
バリデーション定義ファイルのキャッシュに使われるディレクトリ
(デフォルト値: cache/validations)
validatorDirectories
追加のバリデータを置くディレクトリ
filterDirectories
追加のフィルタを置くディレクトリ
validatorPrefixes
バリデータクラスの prefix
(デフォルトの Piece_Right_Validator という prefix 以外に追加登録したい場合に設定して下さい)
filterPrefixes
フィルタクラスの prefix
(デフォルトの Piece_Right_Filter という prefix 以外に追加登録したい場合に設定して下さい)
template
テンプレートとして用いるバリデーションセット
 

設定する場合は、 setConfigDirectory() などの各オプション専用のメソッドを用いるか、 連想配列の形でコンストラクタにパラメータを渡して下さい。

 

configDirectory, cacheDirectory には、 モジュールのディレクトリからの相対パスを指定します。

 

validatorDirectories, filterDirectories には、 バリデータやフィルタが置かれているディレクトリそのものではなく、 基点となるディレクトリを指定します。 例えば、Zend_Filter_xxx クラスはフィルタとして流用することができますが、 その場合は Zend/Filter/xxx.php を探しにいって欲しいので、

$validator->addFilterDirectories('/path/to/ZendFramework/library')
          ->addFilterPrefixes('Zend_Filter');

のように指定することになります。

バリデーション定義ファイル

バリデーション定義ファイルの書き方については、 Piece_Right ユーザーズマニュアル を参照して下さい。

サンプル

動作確認用に簡単なサンプルを用意しました。 アーカイブをダウンロードし、 適当なディレクトリで p オプションを付けて展開して下さい。

$ cd sample
$ tar xvfzp Revulo_Sample_Authentication-0.8.tar.gz

あとは http://…/sample/html/ のような URL にアクセスすれば試すことができます。

ダウンロード

更新履歴

  • Version 0.9 (2008/07/29)
    • Piece_Right 1.10.0 でエラーハンドリングが変更されたのに対応
  • Version 0.8 (2007/12/02)
    • Piece_Right 内で exception レベルのエラーが発生した場合に、例外を投げるよう実装
    • Piece_Right 1.8.0 以降のバリデーションテンプレートの機能に対応
  • Version 0.7 (2007/09/02)
    • モジュールへの対応を強化するために、configDirectory, cacheDirectory の設定方法を見直し
      • モジュールのディレクトリを起点とする相対パスで指定するように変更
      • 指定がなければ、デフォルト値を用いて自動設定するように変更
    • 各オプションを設定する setConfigDirectory() などのメソッドを追加
    • 必要な時だけ Zend_Config クラスを読み込むように変更
  • Version 0.6 (2007/08/25)
    • Piece_Right 1.7.0 以降の getFieldNames() メソッドを用いるように変更
    • addMessages() しても getErrors() に反映されていなかったのを修正
  • Version 0.5 (2007/06/23)
    • バリデータとフィルタの directory, prefix を追加指定できるように
  • Version 0.4 (2007/06/02)
    • Zend Framework 1.0.0 RC1 の仕様に合わせ getErrors() メソッドを追加
  • Version 0.3 (2007/05/13)
    • getNames() メソッドを追加
    • getValues() の返り値の型を isValid() の引数に合わせるように修正
  • Version 0.2 (2007/03/05)
    • isValid() メソッドの引数としてオブジェクトを渡せるように拡張
    • isValid() で渡した値はフィルタ処理されて返って来るように変更
  • Version 0.1 (2007/03/03)
    • Zend_Validate_Interface に合わせて作り直し
*1 Zend_View_Helper が複数のチェックボックスに未対応なので、その部分の処理はかなり無理矢理です。

(Counter:1, Today:1, Yesterday:0)
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   最終更新のRSS