エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法

      2024/09/08

CakePHP4のController内でViewテンプレート、レイアウトの指定はrenderを使用する

 
CakePHP4では、Controller内で Viewテンプレートや、レイアウトファイルをデフォルト以外のものに変更したいときは下記のように記述します。
 

 
上記を記述することで、Viewのテンプレート、および、レイアウトを指定する事ができます。
 
 
また、テンプレート、レイアウトを使用しない場合は、下記の記述をします。
 

 
 

CakePHP4でrenderに Viewを指定する具体的な記述方法の解説

 
具体的に、Controller内で Viewテンプレートや、レイアウトファイルをデフォルト以外のものに変更したいときの記述方法を解説します。
 

 
$view」に編集するテンプレートのファイル名ですが、下記のルールがあります。
・拡張子の「.php」は記述しない
・標準フォルダ内にある場合はファイル名のみで OK
・「/」から始めると「/templates」からの相対パスになる
 
 

デフォルト設定で処理される Viewについて

 
そのため、例えば、下記の Controller、Actionで処理をしているとします。
 Controller名「Samples」
 Action名「getData」
 
この場合、「render」でテンプレートを指定しないデフォルトの状態では下記のファイルをテンプレートとして使用します。
 /templates/Samples/get_data.php
 
ここで注意が必要な点は、Action名は「getData」のようにローワーキャメルケースで記述しますが、テンプレートのファイル名は「get_data.php」のようにスネークケースで記述することになります。
 
これを間違えると下記の「テンプレートファイルがないよ」というエラーが発生します。
Missing Template
Cake\View\Exception\MissingTemplateException
Error The view for SamplesController::getData() was not found.

 
 

デフォルトのフォルダ内にある Viewを renderに指定をする方法

 
今度は、デフォルトのフォルダ内にある「get_image.php」というテンプレートファイルを使用したい場合の対応です。
 
下記のファイルを使用します。
 /templates/Samples/get_image.php
 
この場合の renderに指定する記述方法は以下となります。
 

 
上記のように、「$view」に「get_image」と、テンプレート名を指定します。
 
$view = "getImage";」のようにローワーキャメルケースで記述しても動作はしますが、公式 Cookbookでもスネークケースで記述してありますので、規約上はスネークケースで記述する方が正しいようです。
 
ちなみに、「$view = "getImage";」と記述しても、テンプレートファイルは「get_image.php」である必要があり、「getImage.php」では読み込まれません。
 
 

フォルダのパスも含めて Viewを指定をする方法

 
最後は、フォルダのパスも含めて Viewのファイル名を指定する方法です。
 
下記のファイルを使用します。
 /templates/element/get_record.php
 
この場合の renderに指定する記述方法は以下となります。
 

 
上記のように、「$view」に「/」から始まるパスを記述すると「/templates」からの相対パスとして扱われます。
 
 
実ファイルを「/templates/element/getRecord.php」とした場合、「$view = "getRecord";」とすることで、テンプレートファイルを読み込むことはできます。
ですが、公式 Cookbookではスネークケースで記述してありますので、規約上はスネークケースで記述する方が正しいようです。
 
ファイル名がキャメルケースの「getRecord.php」である場合は renderにも「getRecord」と記述する必要があり、スネークケースの「get_record.php」である場合は renderにも「get_record」と記述する必要があるようです。
キャメルケース、スネークケースが混在している場合はエラーになります。
 
 
ちなみに、規約からは外れるようですが、
 /templates/Samples/getData.php
上記のように、標準フォルダ内にキャメルケースで記述したファイルをテンプレートとして使用する場合は、
 $view = "/Samples/getData";
のようにパス付でファイル名を指定する事で使用することは可能です。
 
 

「render()」を使用する際の注意点・renderは最後に書く理由

 
「render()」を使用する場合の注意点は
$this->render(string $view, string $layout);」は可能な限り Controller内の最後に書くことが必要です。
 
 
理由は単純です。
$this->render(string $view, string $layout);」の後に記述された「$this->set()」の変数は受け取ることができないためです。
 
 

 
 
「render()」関数に限った話ではありませんし、CakePHP3のころも同じであったと思いますが、「render()」で指定したテンプレート内で使用する変数は、「render()」を記述するより前に「$this->set()」で指定しておく必要があります。
 
順番が逆だと、Viewテンプレートでは変数を扱うことができませんので、「変数がないよ!」というエラーが発生します。
 
 
単純なことなだけにエラーが発生したときになかなか気づけない不具合とも言えます。
 
 

テンプレート、レイアウトを使用しない場合は autoRender、layoutに falseを指定する

 
前項までは、テンプレートファイル、レイアウトファイルを指定して使用する方法の解説でしたが、テンプレートファイル、レイアウトファイルを使用しない場合の設定方法を解説します。
 

 
記事の最初に書いたものと同じですが、大きなポイントは CakePHP3のころは利用できた下記の記述方法が使えなくなっている、という点です。
 

 
そのため、「$this->autoRender = false;」「$this->layout = false;」をぞれぞれ指定する必要があるようです。
 
 
参考サイト
https://book.cakephp.org/4/ja/controllers.html
https://book.cakephp.org/4/ja/views.html
 
 

CakePHP4の関連記事

CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
 
その他の「CakePHP4」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする

CakePHP4、CakePHP3でブラウザにキャッシュさせる設定の解説。CSS、JavaScript、画像をブラウザにキャッシュさせるのか、定期的にリロードする設定にするのかの設定が可能。

CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。

CakePHP3のCakeDC/Usersのログイン後のリダイレクトを設定解説
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。

CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。

CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。

CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP3でテーブルにカラムを追加したときに変更するポイントのまとめ
CakePHP3でテーブルにカラム(項目)を追加したときに変更するポイントのまとめ

CakePHP3でシステム開発をする際、途中でカラムを追加した場合に何を変更すればいいかを確認。カラムを追加する前後で Bakeした結果を比較し、変更になった点をリストアップした。

国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法
国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法

CakePHP4で定数に変数を埋め込み、翻訳機能「__()」で変数に値を入れる方法を紹介。定型の文章の一部だけを置換したい場合に利用すると便利。