PHPフレームワークLaravelのviewではbladeというテンプレートエンジンが使えます。 このブレードってやつについてまとめてみました。

bladeって何なのさ

ブレードはクラスのように階層化したテンプレートエンジンです。 階層化されているので、たとえばフッターとかの決まりきった部分は基底クラスに定義して、bodyの中だけを書いたbladeを読みこむ、という使い方ができます。

サンプル

今回は二つのblade、base.blade.phpとindex.blade.phpがあるとします。 基底クラス側となるbase.blade.phpはこんな風に書かれます。
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@section('body')
base
@show
</body>
</html>
この@がついている部分がblade用の記述です。 @yieldは変数を読み込んでいるような感じで理解すればいいですね。 echo $titleと書かれているようなもので、$titleは子クラス(クラスじゃないけど)で定義します。 @sectionは関数というかブロックというか、一つのまとまりです。 @sectionの終わりを@showとしているので、base単体で呼んでもこのまま表示されます。 続いて子供側となるindex.blade.phpを見てみましょう。 こんな感じです。
@extends('base')
@section('title')
title sub
@endsection

@section('body')
@parent
sub
@stop
@extendsは継承元を記載します。 class index extends baseといった感じ。 んでsectionが二つ書かれていますが、@section('title')はbase側のyieldに入る値です。 次の@section('body')には@parentとあるので、親クラスの@section('body')の中身であるbaseという文字列が読まれ、次にsubという文字列が読まれます。 結果的にこれを読みだすと
<html>
  <head>
    <title>title</title>
  </head>
  <body>
    base
    sub
  </body>
</html>
となるわけです。

Controllerから呼ぶ

呼び方は普通にviewを呼ぶのと一緒。
public function index()
{
    return view('test/index', ['value' => 1]);
}
この場合はresource/views/test/index.blade.phpというファイルがあればそっちを優先して呼ばれます。 無ければresource/views/test/index.phpが呼ばれます。

他の@要素

@yield、@section以外にも色々な@要素があるので紹介します。

{{ $var }}

echo $varと一緒です。htmlentitiesが自動でかぶさります。昔は{{{ }}}と{{ }}でエスケープする、しないが分かれていたようだけど5系はどっちもエスケープするっぽい。

{!! $var !!}

こちらはエスケープしない版。

{{ $var or 'default' }}

echo $var !== null ? $var : 'default'のような感じ。

{{-- Comment --}}

コメントです。

@extends('layout')

親ブレードを指定します。

@if(condition)

ifです。コントローラーから渡した変数が使えます。
@if (Auth::guest())
    <li><a href="{{ route('login') }}">Login</a></li>
@else
    ・・・
@endif

@else

elseです。

@elseif(condition)

elseifです。

@endif

ifの終わりです。

@foreach($list as $key => $val)

phpのforeachと同じです。

@endforeach

foreachの終わりです。

@for($i = 0; $i < 10; $i++)

phpのforと同じです。

@endfor

forの終わりです。 @while(condition) - phpのwhileと同じです。 @endwhile - whileの終わりです。 @unless(condition) - if (!condition)という意味です。 @endunless - unlessの終わりです。 @include(file) - 他のブレードを読み込みます。 @include(file, ['var' => $val,...]) - 他のブレードを読み込み、変数を与えます。 @each('viewfile-to-render', $data, 'variablename') - foreach($data as $variablename)という形式でviewfile-to-renderブレードを読み込みます。 @each('viewfile-to-render', $data, 'variablename','optional-empty-viewfile') - 上記と同様ですが、$dataが空の場合はoptional-empty-viewfileを読み込みます。 @yield('section') - sectionを当てはめる場所です。 @section('name') - セクションの開始を示します。 @show - セクションの終わりを示します。showはそのまま表示されます。 @stop - セクションの終わりを示します。stopはyieldの場所にしか表示されません。 @endsection - Laravel3の頃に使われていたセクションの終わりです。現在でも使えます。 @append - 上位ブレードで同じセクションがあった場合、追記されます。 @overwrite - 上位ブレードで同じセクションが合った場合、上書きされます。 @parent - 上位ブレードのセクションをそのまま読み込みます。 @lang('message') - 現在の言語に沿った文章を表示します。 @choice('message', $count) - 現在の言語に沿った文章を複数形で出す場合に$countが使われます。 こんなもんかな。 まだあったら追記します。