よく使うディレクティブ
ディレクティブとは
bladeテンプレートにはディレクティブと呼ばれる機能があります。 bladeテンプレート上で制御構造やincludeなど様々な機能を利用することができます。 ここではよく使われるディレクティブについて見ていきましょう。
@if
bladeテンプレートではifのような制御構造を利用することもできます。
<body>
<h1>{{ $title }}</h1>
{{-- ここはbladeのコメントです。出力時には無視されます。 --}}
<!-- HTMLのコメントは普通に出力されます。 -->
<p>$numの値は{{ $num }}です。</p>
@if($num > 5)
<p>5より大きいです。</p>
@endif
@if($num > 15)
<p>15より大きいです。</p>
@endif
</body>
このように @if というディレクティブを利用して、 bladeテンプレート内で条件分岐を行うことが可能です。 分岐の終了地点で @endif の記述が必要になるので忘れないようにしましょう。
@else
phpにおけるif-else構文のように bladeテンプレートでも @else ディレクティブが利用できます。
<body>
<h1>{{ $title }}</h1>
{{-- ここはbladeのコメントです。出力時には無視されます。 --}}
<!-- HTMLのコメントは普通に出力されます。 -->
<p>$numの値は{{ $num }}です。</p>
@if($num > 5)
<p>5より大きいです。</p>
@endif
@if($num > 15)
<p>15より大きいです。</p>
@else
<p>15以下です。</p>
@endif
</body>
上記のように追記して、条件が満たされない場合の処理が 行われるのを確認しておきましょう。
@elseif
phpにおけるif-else if構文のように bladeテンプレートでも @elseif ディレクティブが利用できます。
<body>
<h1>{{ $title }}</h1>
{{-- ここはbladeのコメントです。出力時には無視されます。 --}}
<!-- HTMLのコメントは普通に出力されます。 -->
<p>$numの値は{{ $num }}です。</p>
@if($num > 5)
<p>5より大きいです。</p>
@endif
@if($num > 15)
<p>15より大きいです。</p>
@elseif($num > 5)
<p>5より大きく15以下です</p>
@else
<p>15以下です。</p>
@endif
</body>
@forelse
bladeテンプレートでは繰り返し構文も利用可能です。 phpにおけるforeachに当たる @foreach というディレクティブも存在しますが、 ここではさらに高機能な @forelse についてみておきましょう。
<body>
<h1>{{ $title }}</h1>
{{-- ここはbladeのコメントです。出力時には無視されます。 --}}
<!-- HTMLのコメントは普通に出力されます。 -->
<p>$numの値は{{ $num }}です。</p>
@if($num > 5)
<p>5より大きいです。</p>
@endif
@if($num > 15)
<p>15より大きいです。</p>
@elseif($num > 5)
<p>5より大きく15以下です</p>
@else
<p>15以下です。</p>
@endif
<ul>
@forelse($messages as $message)
<li>{{ $message->name }}: {{ $message->body }} {{ $message->created_at }}</li>
@empty
<li>メッセージはありません。</li>
@endforelse
</ul>
</body>
上記のように追記を行うと、$messagesに含まれる要素の数だけ li要素が出力されているのが確認できます。
@empty
@forelseでは、@emptyブロックを利用して、展開する変数の要素が一つもなかった時の動作を設定できるのが特徴です。
SampleContrllerを一時的に書き換えてテストしましょう。
続いて、コントローラにアクションを作成します。
sample_app/SampleController.php
(略)
public function blade_example(){
$title = 'bladeテンプレートの様々な機能';
$num = 10;
//$messages = \App\Message::all();
$messages = [];
return view('blade_example',[
'title' => $title,
'num' => $num,
'messages' => $messages,
]);
}
(以下略)
$messages が空の配列になっているときは @empty のブロックが実行されていることを確認しましょう。
(確認が終了後、SampleControllerを元に戻しておきましょう。)