エラー画面のレイアウトを変更する

CakePHP4でレイアウト、つまり大枠の部分のデザインテンプレートは、デフォルトでは
template/layout/default.php が使われます。
これは、レイアウトファイルといわれていますが、デフォルトのレイアウトファイルを変更する場合はコントローラーで以下のようにします。

$this->viewBuilder()->setLayout('hoge');

これで以下のファイルがレイアウトファイルとして使われます。
template/layout/hoge.php

ですが、500番とか400番とかのエラー画面でレイアウト指定をしたい場合、なぜかsetlayout()メソッドを使ってもレイアウト変更ができません。
どうも、エラー用のテンプレートだと仕組みがちょっと違うらしい。

エラー画面は
template/Error/error400.php などがそれにあたりますが。ここには

$this->layout = 'default';

という記載があり、ここでレイアウトファイルを切り替えているようです。
例えば、Adminルーティングで表画面と管理画面でエラー画面のレイアウトを変更したい場合は

$this->layout = 'default';
$prefix = $this->request->getParam('prefix');
if($prefix=='Admin'){
    $this->layout = 'admin';
}

こんな感じにしてあげればいいみたいです。

タイトルとURLをコピーしました