CodeIgniterのライブラリを使ってレスポンスをスッキリさせる
日本ではあんまり人気がない(らしい)PHPフレームワークのCodeIgniter
軽量だし、MVCモデルがシンプルに使えて拡張できるのはなかなか気に入っているので、
自分で作ったライブラリなんかをメモがてら残しておこうと思います。
今回作ったのは
画面表示用のライブラリを作りました。
デフォルトのCodeIgniterではviewの呼び出しは
$this->load->view('hoge', $data);
みたいに、コントローラ側でロードしてあげればいいんだが、
例えば
- ヘッダー
- コンテンツ
- フッター
みたいにviewファイルをいくつか呼び出していてコンテンツ部分だけ切り替えたい、みたいな時は、その都度必要なviewを全部呼び出さなきゃいけなくて不便。
せっかくCodeIgniterを使っているんだし、足りないものは自分で作らなきゃね、ってことで
$this->response->html('hoge');
としたら、ヘッダーとかの固定要素は全部読み込んで、共通で渡したい情報もセットできるライブラリを作りました。
実装
FWのapplication/librariesの下にResponse.phpを作成します。
htmlメソッドは例えば以下のような感じ。
------------------------------------------------------------
/**
* レスポンスをHTML形式で出力する
*
* @param string $view ビュー名
* @param array $vars 表示データ
* @return void
*/
public function html($view, $vars = array()) {
$vars = array_merge($this->vars, $vars);
$this->ci->load->view('templates/header', $vars);
$this->ci->load->view($view, $vars);
$this->ci->load->view('templates/footer', $vars);
}
------------------------------------------------------------
$varにはレスポンス時に渡すデータ配列が渡せる仕様です。
今回は詳しく書きませんが、別途setメソッドを用意して外部から変更もできるようにしています。
このライブラリの中にJSONとかXMLとかあらゆるレスポンス形式のメソッドを作り込んでいけば、どんなレスポンスに対しても
response->***
のような統一感あるレスポンスが書けるはずです。
ただ、これを作っただけだとコントローラ側でロードしないと使えないので、
autoloadに書いて、自動で読み込むようにしておきましょう。
CodeIgniterではapplication/configの下にautoload.phpがあるので
$autoload['libraries']の配列内につくったライブラリを追加するとクラスからでも使えるようになります。
おわりに
CodeIgniterは拡張性が高いから、欲しいものはどんどん自分で作りましょう!
次回は認証のライブラリでも作ろうかな。