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