共通部分があるなら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()

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

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

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

プログラマのまっちーです。酒が大好きです。ある一定量のお酒を飲むと壊れたレディオモードに入り、同じことを繰り返す癖があります。宜しくお願いいたします。

このメンバーの記事をもっと読む