【CakePHP3】Controllerで表示させるViewファイルをrender()で変更する




今回はControllerでレンダリングを行うViewファイルを任意に変更できるrender()メソッドについて解説していきます。

そもそもの命名規約について

ウェブフレームワークcakePHPは命名規約が厳しく、ControllerとViewファイル(.ctp)の間にもルールが存在します。基本的にはそれに従ってコードを書いていくのですが、自由にControllerのレンダリング先Viewファイルを変えたいということがあるでしょう。そのときはrender()メソッドを使います。

コードサンプル

src/Controller/ArticlesController.php

こちらのコードサンプルでは、ArticlesController.phpというコントローラーを作成し、index()というメソッドを定義しています。cakePHPの規約に従えば、このindex()はsrc/Template/Articles/index.ctpファイルをレンダリングします。

しかし、index.ctp以外のファイルを使いたいという場合もあるかもしれません。今回はArticlesディレクトリにあるhogehoge.ctpを対象にしたいとすると、$this->render(‘hogehoge’);と書くことによってレンダリング先をsrc/Template/Articles/hogehoge.ctpにすることができます。

()の中にはsrc/Template/Articlesからの相対パスを書くので、$this->render(‘sample/hogehoge.ctp’)のように階層を深くしていくことも可能です。

render()の注意点

このrender()メソッドは、使われたところで処理が終了します。つまりメソッド内(今回の場合はindex())の一番最後か、returnの直前に書かなければいけません。例えば、

このようにset()の前でrender()をしてしまうとset()が行われずviewで変数エラーが出ます。ついやってしまいがちなミスなので、気をつけてください。