この記事を読むのに必要な時間は約 4 分です。
CakePHP では、Controller の Action 名から自動的に読み込まれる ctp ファイルが決定します。当記事では、Action 名と異なる View の ctp ファイルを読み込む方法をご紹介します。
[pn-box color=”lgray”]
CakePHP 関連記事は、以下よりご覧下さい。
[pn-box-close]
読み込む View (ctp ファイル) を指定する方法
Controller で以下の例のように $this->render( ctp ファイル名 ); で指定します。
以下の例は、PostsController の hoge という Action で、app/View/Posts/fuga.ctp を読み込む場合の記述です。
public function hoge(){ ... 処理 ... $this->render("fuga"); // .ctp は付けない }
ポイントとしては、以下の通りです。
- Controller で render() が 1度も呼ばれない場合は、Action 名を元に autoRender を行います。(いつもの動作)
- 1度でも render() が呼ばれると、autoRender は行われません。
異なるディレクトリの View を呼び出す場合
通常であれば、Controller 名に基づいたディレクトリ ( 前述の例であれば、app/View/Posts ディレクトリ ) になります。
異なるディレクトリにある View を呼び出す場合は、”ディレクトリ / ctp ファイル名” を指定すれば OK です。
public function hoge(){ ... 処理 ... $this->render("/Piyo/fuga"); // app/View/Piyo/fuga.ctp が呼び出される }
こんな場合に役立つかも
PC 用と、モバイル用 とで、View を分けている場合
必要なデータ・処理は共通ですが、PC 用・モバイル用 それぞれに View を作成して、Controller で User Agent により View を分岐させるような場合、必要になるかと思います。
action は 1つ 固定だが、View は分けたい場合
action は 1つ固定になっているが、コンテキストや受け取るパラメーターによって、View を変えたい場合でしょうか。
具体的な例は思いつきません … 。
[pn-box color=”lgray”]
公式ドキュメントへのリンク
CakePHP Cookbook 2.x > コントローラ > 指定したビューを描画する
[pn-box-close]
ひとこと
特段難しいことはありませんが、ちょっと時間あくと忘れてしまいがちです。
View を rendering するんだ、というイメージを覚えておくと忘れづらくなるかと思います。多分。
[pn-cakephp-env]
今回は以上です。
[pn-amzn-cakephp]