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にレンダーされない --}}
});