備忘録

webの備忘録のために

CakePHP3 レイアウト

前回の記事のビューテンプレートとレイアウトに関して記事にしたけど、

ビューテンプレート = コンテンツ部分。

レイアウト = 共通テンプレート。

という解釈を自分の中ではしてるのだが、このレイアウトについてもう少し具体的に。

基本デフォルトのレイアウトがCakeをインストールした時に src/Template/Layout/Default.ctpこちらのファイルがデフォルトのレイアウトファイルになっている。

こちらに今回のレイアウトとして使用するレイアウトファイル(hello.ctp)を設置。 Helloコントローラを参考にするのでこちらの名前で。

-ソースコード(src/Template/Layout/hello.ctp)

<!DOCTYPE html>
<html lang="ja">
 <head>
    <?=$this->Html->charset(); ?>
    <title>
        <?= $this->fetch('title') ?>
    </title>
    <?php
    echo $this->Html->css('cake.hello');
    echo $this->Html->script('cake.hello');
    echo $this->fetch('meta');
    echo $this->fetch('css');
    echo $this->fetch('script');
    ?>
</head>
<body>
    <div id="container">
        <div id="header">ヘッダー</div>
        <div id="content">
            <?=$this->fetch('content') ?>
        </div>
        <div id="footer">テスト</div>
    </div>
</body>
</html>

こちらのサンプルコードをみると $this->Html とかかれているものに関しては「HtmlHelper」というクラスのインスタンスで管理。 このように書かれている箇所は$this->Html に便利な機能が格納されていると思えばおーけー。

$this->Html->css('cake.hello'); → webrootのcssのcake.hello.cssを呼び出し

$this->Html->script('cake.hello'); → webrootのscriptのcake.hello.cssを呼び出し

続いて$this->fetchに関してはCakePHPに保管されているブロックと呼ばれる値を取り出す。

<?= $this->fetch('title') ?> → メンバ変数で定義した$nameを書き出し

$this->fetch('meta'); → metaブロックを書き出し

$this->fetch('css'); → cssブロックを書き出し

$this->fetch('script'); → scriptブロックを書き出し

このfetchとは呼び出すという意味で、設定してあるブロックを呼び出すということ。 このブロックという概念に関してはまだ自分でふわっとしてるので、いづれまた別の記事でまとめて書く。