Laravel5 Bladeの使い方

Laravel5のテンプレートエンジンはかつてのSmartyとかと比べると各所やたらと優れています。
かつてhtmlコーディングといえばインクルードだったわけですが、bladeの場合は継承が基本です。インクルードもできますが、大本の雛形を継承するというのがベスト・プラクティスです。
またコードが汚くなることを覚悟でPHPを直接書くこともできます。
https://readouble.com/laravel/5.5/ja/blade.html

継承 (extends)

雛形になるHTMLをapp.blade.phpとして作成して各ページで以下のように継承します。

@extends('layouts.app')

セクション(section)

各ページでは@sectionでそれぞれのページごとにコーディングを反映します。@sectionは親テンプレートで@yieldで呼び出します。
sectionブロックの場合は、こんな感じ。

[子テンプレート]
@section('content')
foobar
@endsection
[親テンプレート]
<div>
@yield('content')
</div>

文字列の場合は、

[子テンプレート]
@section('title', 'Homepage title')
[親テンプレート]
<title>@yield('title')</title>

ブロックだけではなく変数も設定できるわけです。

インクルード(include)

とはいえ、インクルードもできます。

@include('common-header')

注入(inject)

クラスから直接値を取り出すこともできます。こんな感じ。親テンプレートにinjectしておけば継承しているテンプレートでも使えます。クラスのネームスペースを取り込んで第一引数にオブジェクトを作ってあげる感じです。メソッドだったら$patameter->foo()、プロパティーだったら$patameter->barみたいな普通の使い方ができます。

@inject('patameter', 'App\Services\Parameter')

{{ $patameter->title() }}

コメントアウト

ソースに現れないのでなかなかいいです。

{{-- ここにコメントを書きます --}}

.envを使う

.envからパラメーターを直接持ってこれます。APP_NAME=Laravelは

{{ env("APP_NAME") }}

という感じで取得。$はいらないです。

Last update: 2017.12.13 (水)