MY_Controller.phpでよりDRYなコードを書く

面白いHackがTwitterで流れてきたので紹介してみたいと思います。

元ネタ:MY_Controller – The CodeIgniter Swiss Army Knife

書いているのは2.0用にFacebook、bit.lyのライブラリを開発・公開しているエリオットさんです。

Controllerの拡張を書く

ご存じのとおり、CodeIgniterはcoreからライブラリから拡張することが可能です。

参考:コアシステムクラスの作成 / CodeIgniter ユーザガイド 日本語版

元ネタの記事はこの方法でControllerクラスを拡張したMY_Controllerクラスを作成し、Modelの呼び出しを簡単にしています。

このHackのメリット

通常、ControllerからModelの呼び出しはこうなります。

$this->load->model(‘user_model’);
$data[‘user’] = $this->user_model->get_by_id(15);

Modelを呼び出し、さらにメソッドを呼ぶ形をとります。

拡張適用後はどうでしょうか?

$data[‘user’] = $this->model(‘user’)->get_by_id(15);

1行にできます!!

やっていること自体はシンプルで、MY_Controllerクラスに$this->load->model()をラップするmodel()メソッドを追加しているだけです。
追加したメソッドの中でModel名に命名規則を持たせ、より短いコードで呼び出せるようにしています。

model()があるならview()もね

$this->model()があるなら、$this->view()も欲しいですよね。(そんなに短くならないだろ、っていう突っ込みはスルー)

という訳で追加してみました。

元ネタのメソッドには、”protected”が無いんですが、このままだと外から呼び出せてしまうので追加してみました。

 

このModelの呼び出しは、うちの標準になりそうです。

MY_Controller.phpでよりDRYなコードを書く」への1件のフィードバック

  1. ピンバック: 備忘録

コメントを残す

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