CakePHP3で$this->viewBuilder()->setLayout()の使い方

CakePHP3で$this->viewBuilder()->setLayout()の使い方

8 回閲覧されました

みなさんこんにちは、jonioです。

CakePHPでは全体のレイアウトのデフォルトの設定が「CakePHPのプロジェクト > Template > Layout > default.ctp」で行われます。

テンプレートによってレイアウトの設定を使い分けないといけない時がありますがそんな時のやり方のメモの記事になります。

おすすめ参考書

CakePHP3はまだまだ仕事で使われます。

下記の参考書がおすすめです。

$this->viewBuilder()->setLayout()

「CakePHPのプロジェクト > src > Controller > AppController.php」に下記の記述をします。

public function initialize()
{
    parent::initialize();

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



}

5行目を記述します。

custom_layout.ctpは「CakePHPのプロジェクト > Template > Layout」の下の階層に設置します。

custom_layout.ctpには下記に記述をします。

<!DOCTYPE html>
<html lang="ja">
<head>
    <?= $this->Html->charset() ?>
    <title>
        <?= $this->fetch('title') ?>
    </title>
    <?= $this->Html->css('styles.css') ?>
</head>
<body>
      <?= $this->fetch('content') ?>
</body>
</html>

11行目にテンプレートで記述した内容が入ります。

これでcustom_layout.ctpのレイアウトが全てのテンプレートで適用されます。

デフォルトのレイアウトのファイルの配置を変更する場合

Layoutフォルダの下の階層に作成しないといけないですが別のフォルダにファイルを作成することもできます。

例えば「CakePHPのプロジェクト > Template > Layout > example > custom_layout.ctp」を作成したとします。

この場合のcustom_layout.ctpを適用する為のAppController.phpの記述は下記になります。

public function initialize()
{
    parent::initialize();

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



}

Layoutフォルダの下の階層に必ず配置しないといけないですがファイル名を書けばフォルダ名を書かずに認識されるみたいです。

テンプレートごとにデフォルトのレイアウトを変える

場合によってはテンプレートごとにデフォルトのレイアウトを変えたい場合もあります。

その場合はコントローラーごとに「$this->viewBuilder()->setLayout()」を記述すればいいです。

public function index()
{
    $this->viewBuilder()->setLayout('index_layout');
}

index_layout.ctpを配置する場所はこれまでの説明と同じ場所です。