SERVICE こんな事ができます

CNTACT ご相談はお気軽に

 ABOUT US こんな会社です



2009/06/05 by マッチー

共通部分があるならbeforeFilter

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

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

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

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

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

これで大丈夫みたい。

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

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

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

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

  • http://www.igarashi-design.com/blog/appcontroller%e5%86%85%e3%81%a7%e3%81%aebeforefilter/ igarashiDesign::blog » Blog Archive » 【CakePHP1.3.9】AppController内でのbeforeFilter