NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2009.06.05

共通部分があるならbeforeFilter

まっちー

CakePHPでプログラムを組んでいるとき、controller内で同じソースを書く場面が何度も出てきていたので、そういうのって共通化して使うことができないのかな~と何度も思ったんですが、やっぱりできるんですね。そりゃできるよね。だってCakePHPだもん。

beforeFilterってのを使うと、それができるらしいです。

function beforeFilter() {

共通で使うソースを書く

}

function add() {

}

function edit() {

}

beforeFilter内に共通部分を書いておくと、addが呼ばれた場合でもeditが呼ばれば場合でも、まず最初にbeforeFilter内に書いてあるソースが読み込まれるので、そこで作った変数などはそのままadd内でもedit内でも使うことができる。

これを知ったおかげで、自分のソースがだいぶすっきりしたっす。初めてクラスを覚えたとき並にすっきりした。

一つ注意が必要なのは、AppControllerでbeforeFilterを使っていた場合、上のようにFoosController(っていう言い方で合ってるかしら?)内でもbeforeFilterを使っていると、AppController内にあるbeforeFilterは読み込まれないらしい。両方にbeforeFilterがあるときは↓

function beforeFilter() {

parent::beforeFilter();

}

これで大丈夫みたい。

ちなみに似たような機能でbeforeRender()ってのもあるみたいですが、こっちは読み込みが後回しになる。

beforeFilter() → add(あるいはeditなど) → beforeRender()

読み込まれる順番はこうなるそうで。

やっぱりね、長ったらしいソースをどれだけ共通化してコンパクトにまとめられるかってのが、プログラムを書いていて面白い部分の一つだと僕は思っているので、こういうのは積極的に使っていきたいです。