cakephp で一つの controller からコンテンツを量産する方法

うまいタイトルが思いつかなかった。。

どういうことかというと
全体レイアウトに Element を使っていたりして
Element に「同じ」動的データを渡したくて、かつ中身はファイルごとに替えたい場合
毎回 controller を作って view を作るのはだるい!!!

ということです。

結果から書くとこう

//引数はファイル名に
class RyousansController extends AppController
{
    function index($name=null){

         //Element へのデータ
         $this->set(“”,””);

         ・・・・適当に共通処理・・・・

         //ここで吐き出す view を指定
         $this->render($name);
    }
}

これでどうなるかというと

http://www.hogehoge.com/ryousan/index/omake/

でアクセスすると

/views/ryousans/omake.tpl

を読みに行くわけです。
view だけ量産すれば
一切 controller をいじらなくても

omake1.tpl -> http://www.hogehoge.com/ryousan/index/omake1/
omake2.tpl -> http://www.hogehoge.com/ryousan/index/omake2/
omake3.tpl -> http://www.hogehoge.com/ryousan/index/omake3/
omake4.tpl -> http://www.hogehoge.com/ryousan/index/omake4/
omake5.tpl -> http://www.hogehoge.com/ryousan/index/omake5/

と view にファイルを突っ込むだけでURLが自動生成されます。
DEBUGモードが0になっていれば
view フォルダにファイルがないURLは404で返されます。

こうしておいて例えばヘッダフッタとかが共通のヘルプページやサイトマップとかは
いちいち controller を作らずに
help.tpl,sitemap.tpl を作って
ryousans/ の中に入れてごりごり書いちゃえばいいだけになります。

一つの controller で view を量産!!

Leave a Reply