LoginSignup
14
15

More than 1 year has passed since last update.

CakePHP入門(3) 〜レイアウト〜

Last updated at Posted at 2018-08-15

デフォルトのレイアウトをいじってみます。
ここでは、Template/layout/default.ctpを複製して、my_layout.ctpとしました。コードを以下のように編集します。

Template/layout/my_layout.ctp
<!DOCTYPE html>
<html lang="ja">
<head>
    <?= $this->Html->charset() ?>
    <title>
        <?= $this->fetch('title') ?>
    </title>
    <?= $this->Html->css('styles.css') ?>
</head>
<body>
    <section class="container">
        <?= $this->fetch('content') ?>
    </section>
</body>
</html>
  • = $this->fetch('title') ?>
    • 各ビューファイルからタイトルを持ってきます。タイトルの渡し方は後ほど。
  • = $this->Html->css('styles.css') ?>
    • styles.cssというスタイルシートを読み込んでいます。
  • = $this->fetch('content') ?>
    • 各ビューファイルの内容がここに代入されます。

my_layout.ctpを全てのビューファイルで適用するために、AppController.phpの初期化処理に以下のコードを追加します。

AppController.php
    ...

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

        $this->viewBuilder()->setLayout('my_layout');  //これを追加

        $this->loadComponent('RequestHandler', [
            'enableBeforeRedirect' => false,
        ]);
        $this->loadComponent('Flash');
    }

    ...

これでOKです。

さて、次に先ほど述べたタイトルの渡し方です。ビューファイルの先頭で、assignメソッドを用いて以下のように書いてあげます。

<?php
$this->assign('title', 'All Users');
?>

...

こうすると、my_layout.ctp にて、'All users'という文字列を'title'としてfetchできるようになるようです。

また、ビューの一部を使いまわしたい場合は、elementを使いましょう。例えば、ヘッダーは全てのページで共通しますね。全てのビューファイルにいちいち同じヘッダーコードを書く(またはコピペする)のは面倒です。
この場合は、src/Template/Element下に、my_header.ctpを作り、

my_header.ctp
<header>My Blog</header>

呼び出したい箇所で、= $this->element('my_header') ?>としてあげると、この部分にmy_header.ctpの内容が代入されます。例えば以下のようにします。

Template/layout/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') ?>   <!-- ここにheaderが代入される -->
    <section class="container">
        <?= $this->fetch('content') ?>
    </section>
</body>
</html>

(3)はここまでにします!

CakePHP入門(1)〜初期設定〜
https://qiita.com/jinto/items/f4545dfb02160c424d48

CakePHP入門(2)〜ファイルの作成〜
https://qiita.com/jinto/items/fe1da36b65fd6e704338

CakePHP入門(4)〜バリデーション〜 
https://qiita.com/jinto/items/ebdc8b673b5b663de7df

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15