【Laravel入門】Bladeテンプレート
引き続きLaravelについて勉強していきたいと思います。
バックナンバー的なもの
・【Laravel入門】 インストールから起動まで - 人生の恥は書き捨て
・【Laravel入門】ルーティング - 人生の恥は書き捨て
LaravelのViewではBladeテンプレートという便利なテンプレートが使えるので、
それの紹介をします。
Bladeテンプレートとは
BladeテンプレートはLaravelの組み込みテンプレートです。
viewにphpをそのまま書くと煩雑になってしまうような、
テンプレートの継承、テンプレート処理、イテレーター処理などを、
簡単簡潔に記述することができます。
Bladeテンプレートのファイルは ファイル名.blade.phpで保存します。
使ってみる
レイアウト
app/views/layouts/master.blade.php
<html> <body> @section('sidebar') parent @show <div class="container"> @yield('content') </div> </body> </html>
ビュー
app/views/template.blade.php
@extends('layouts.master') @section('sidebar') @parent <p>child</p> @stop @section('content') <p>ここは本文のコンテンツ</p> @stop
こんな感じで使うことができます。
セクションの宣言をして
@yield('content')
セクションを実装します。
@section('contents') <p>ここは本文のコンテンツ</p> @stop
レイアウトで共通部分をだけを実装して、残りの部分の実装は個別のテンプレートに任せる場合は、
sidebar部分のように
宣言
@section('sidebar') parent @show
実装
@section('sidebar') @parent <p>child</p> @stop
というようにします。
@show と @stop
Bladeテンプレートは、正規表現を使って置換を行っているだけなので、
想定されない使い方をすると変わった挙動をするようです。
@showの部分は継承したときに個別のviewが表示されるところを表していて、
継承したときに末尾に@stopをつけるわけですが、
じゃあ2回継承した場合どうなるの?って思ったのでやってみました。
master.blade.php
@section('sidebar') master @show
master2.blade.php
@extends('layouts.master') @section('sidebar') @parent <p>master2</p> @show
template.blade.php
@extends('layouts.master2') @section('sidebar') @parent <p>template</p> @stop
これで2重継承できました。
でも書き方が直感的じゃないというか@stopが2回ってどうなの?
master2の@stopを@showに変えると表示がおかしくなってしまいます。