【PHP】共通レイアウトの管理ファイルについて
概要
エラーの出力方法を勉強しているときに、
ふとエラーの出力先設定方法が気になったので調べた。
結論から言うと、
ヘッダーとかフッターなどページ共通のレイアウトを管理するファイルで
エラー(Flash)の表示を行っていた。
仕組み
いま、デフォルトで設定しているレイアウトファイルは以下となる。
12行目で正常終了かエラーのメッセージを出力をしている。
・my_layout.ctp
<!DOCTYPE html> <html lang="ja"> <head> <?= $this->Html->charset() ?> <title> <?= $this->fetch('title') ?> </title> <?= $this->Html->css('styles.css') ?> </head> <body> <?= $this->element('my_header'); ?> <?= $this->Flash->render() ?> <div class="container clearfix"> <?= $this->fetch('content') ?> </div> </body> </html>
この共通レイアウトってどこで設定してるんだっけ
Controllerのメソッドで定義する。
こんな感じ。
<?php //$this->viewBuilder()->setLayout('使いたいレイアウトファイル名'); $this->viewBuilder()->setLayout('my_layout'); ?>
ここで注意点。
例えば上記をindexに設定すると、
indexのページにしか適用されない。
↓こんな感じだと、viewのページでは適用されない。
<?php class PostsController extends AppController { public function index() { $this->viewBuilder()->setLayout('my_layout'); $posts = $this->Posts->find('all'); $this->set('posts', $posts); } public function view($id = null) { $post = $this->Posts->get($id); $this->set('post', $post); } }
じゃあどーするかというと、
継承元のクラスに書いちゃう。
上記の場合でいうと、「AppController」クラスに。
「AppController」クラスに"initialize"メソッドがあるので、その中に記述すればOK。
※"initialize"メソッドとは初期化処理です。
そうすると、すべてのactionに対して共通レイアウトが適用される。