PHP5内製フレームワークを拡張した雑感、Net_URL_Mapper ほか
この間、社内勉強会で、「PHPの内製フレームワークを拡張した雑感」みたいなことを話しました。こちらにその内容を書こうと思います。
ツッコミやアドバイスなどありましたら、お気軽にメッセージなど頂ければと思います。あ、Twitter id は kumamidori です。
Net_URL_Mapper
- ウノウラボさんのエントリーとKwappaさんのエントリーでドキュメントは揃っている。感謝です。
- 以下、これでフロントコントローラ(URLルータ)を実装した感想。
URLのルール設計が重要。convention over configuration の原則を外すと、楽ができず、工数UPする。
■楽々なURL設計の例(convention)
/[モジュール名]/[アクション名]/[パラメータ]
例:東京都の学校一覧画面
/school/list/tokyo
マッピングしたいのは、
schoolディレクトリ配下のListActionクラス。
→ これなら、解析したURLパラメータからそのまま生成オブジェクトを自動的に決定できるから楽。
■工数UPなURL設計の例(configuration)
/固定文字列/[検索用パラメータ]
例:東京都の学校一覧画面
/schoollist/tokyo
マッピングしたいのは、
schoolディレクトリ配下のListActionクラス。
→ これだと、解析したパラメータからそのまま生成オブジェクトを決定することはできない。たとえば、
if($param1 == 'schoollist') { $moduleName = 'school'; $actionName = 'List'; }
のような、判定処理用の設定を、画面を追加するごとにいちいち追加してやる必要がある。
- 実務では、顧客要望で後者になり、ベタに設定地獄&if文でお茶を濁してしまいました。
ロガー「Log4PHP」
- 良いと思ったところ
- 設定が簡単。高機能。
- 難儀したところ
- PHP5の環境で試したら、大量の E_STRICT エラーが出た。
- PHP5環境でPEAR等の「PHP4互換ライブラリ」を使う場合は、error_reporting を甘く設定するか、もしくはPHP5ベースのライブラリだけで固めるかするケースが多いのではないかと思う。
- そういう意味では、最初からPHP5で作ってあるフルスタックフレームワークを使う方が楽かもしれない?
- 実務では、結局、別物の内製ロガークラスを流用することにした。
デバッグ用のパラメータビュー
実装ではない話
ディスカッションしているときに、ふと、「なんかつまったときに、気軽に聞ける場所が欲しいってことですよね。」とのまとめ発言あり。そーなんですよね〜(汗)と思ったけれど、どうしたら良いのかはよくわからず。