Bladeテンプレート

Bladeはシンプルですが、パワフルなLaravelのテンプレートエンジンです。コントローラーレイアウトと違い、Bladeはテンプレートの継承セクションにより扱われます。全てのBladeテンプレートには.blade.php拡張子が付きます。

Bladeレイアウトを定義する

<!-- resources/views/layouts/master.blade.php として保存 -->

<html>
    <head>
        <title>アプリ名 - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            ここにマスターサイドバー
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

Bladeレイアウトを使用する

@extends('layouts.master')

@section('title', 'ページタイトル')

@section('sidebar')
    @@parent

    <p>ここはマスターサイドバーに追加される</p>
@stop

@section('content')
    <p>ここはコンテンツの本文</p>
@stop

Bladeレイアウトを「拡張(extends)」するには、ただレイアウトのセクションをオーバーライドするだけです。子のビューで親のコンテンツをインクルードするには@@parentディレクティブをセクションで使用します。サイドバーやフッターでレイアウトのコンテンツを追加する場合などに便利です。

セクションを定義するべきか迷うこともあります。そんな場合は、デフォルト値を@yieldに直接指定できます。2つめのパラメーターで、デフォルト値を指定してください。

@yield('section', 'デフォルトの内容')

その他のBlade制御構文

データーのecho

こんにちは、{{ $name }}さん。

現在のUnixタイムスタンプは、{{ time() }}です。

存在を確認した後にデーターをecho

時々、セットされてるかわからない変数をechoしたい場合があります。基本的に、このように実現できます。

{{ isset($name) ? $name : 'デフォルト値' }}

三項演算子を書く代わりに、Bladeでは次のような短縮形を使用することができます。

{{ $name or 'デフォルト値' }}

波括弧をそのまま出力する

カギカッコで囲まれた文字列をそのまま出力する必要がある場合には、@を先頭に付けることで、Bladeの処理をエスケープすることができます。

@{{ これはBladeで処理されない }}

データをエスケープしたくない場合は、以下のような記述をしてください。

こんにちは、{!! $name !!}さん。

注意: アプリケーションのユーザーから入力された内容を表示する時には注意が必要です。内容をHTMLエンティティへエスケープするために、二重の波括弧記法をいつも使用すべきでしょう。

If文

@if (count($records) === 1)
    レコードは一つ!
@elseif (count($records) > 1)
    複数のレコードがある!
@else
    レコードはない!
@endif

@unless (Auth::check())
    あなたはログインしていない!
@endunless

ループ

@for ($i = 0; $i < 10; $i++)
    現在の値は、{{ $i }}です。
@endfor

@foreach ($users as $user)
    <p>ユーザー{{ $user->id }}です。</p>
@endforeach

@forelse($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>ユーザー未登録</p>
@endforelse

@while (true)
    <p>永久にループ中</p>
@endwhile

サブビューをインクルードする

@include('view.name')

読み込むビューにデーターの配列を渡すことも可能です。

@include('view.name', ['some' => 'data'])

セクションのオーバーライド

セクション全体を書き換えるには、overwrite文を使用してください。

@extends('list.item.container')

@section('list.item.content')
    <p>これは、{{ $item->type }}タイプのアイテムです。</p>
@overwrite

多言語に対応済みの行表示

@lang('language.line')
@choice('language.line', 1)
@choice('language.line', 1);

コメント

{{-- このコメントは、HTMLにレンダーされない --}}
});