wadslog

ものづくりの備忘録

[Zend Framework] Zend_Filter_InputをZend_Controllerで使ったときのメモ

Zend Frameworkを使って、MVCフレームワークで開発しているとき、Zend_Filter_Inputを使ってフォームで入力された値のフィルタリングを行う処理を記述した時のメモ。

以下のようなフォームで、入力された値についてチェックをかける場合。

普通にZend_Filter_Inputを使ってフィルタリング処理をアクションメソッドに書くと以下のようなになります。

このように書くとアクションメソッドが大きくなってしまってちょっといやな感じだったのでやり方を変えてみました。

以前参加した設計勉強会でのtwkさんの発表や、Ethnaのフィルター処理(もとはStruts?)を参考にしています。

まず、各コントローラーで共通の処理を基底のコントローラにまとめます。
そして各アクションメソッドはサブクラスで実装することにします。

基底のコントローラがBaseControllerで、アクションメソッドを記述するサブクラスをRegisterControllerとします。

BaseControllerではフィルターの初期化と入力されたデータのセットを、それぞれinit()とpreDispatch()関数で行います。

各サブクラスではフィルタリングするルールを、$_filter_rules、$_validator_rulesのプロパティーに記述して、各アクションでフィルタリングの処理を実行します。

もしエラーがあった場合は、エラー処理を行います。

フィルタークラスはZend_Filter_Inputを継承しています。
クラス内でいつも設定するオプションや、エラーメッセージ取得の簡略化など、独自の処理を記述しています。

こんな感じで作ってみましたが、ほかの人はどのようになっているのでしょうか。

2008.12.18追記
doitさんにご指摘いただいた部分を修正しました。

前へ

[mysql][Apache] mod_log_sql関連のベンチマーク

次へ

[apache] apacheでリバースプロキシーを設定したときのメモ

  1. doit

    基底クラスのメンバをprotectedで宣言されて
    派生クラスをprivateで再定義されていますがError
    にならないでしょうか?_?

  2. doitさんご指摘ありがとうございます。

    私の記述ミスでした。
    たしかに、派生クラスのメンバのアクセスレベルは基底クラスのものと同じか、それよりゆるくしないとエラーが出ますね。

    ご迷惑おかけしました。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Powered by WordPress & Theme by Anders Norén