Larave – ディレクティブ

概要

ディレクティブ(directive)はBladeテンプレート内に記述し、テンプレート内でPHPの処理・制御をおこなったり、共通のレイアウトを扱うといった処理を指示する。

ディレクティブは@キーワードのように書き、そのキーワードに応じて必要な表現が続く。

ロジック制御系ディレクティブ

分岐系ディレクティブ

@if

@unless

@empty

@isset

ループ系ディレクティブ

@for

@foreach

@forelse…@empty

@while

@break

PHPのbreakと同じ使い方。

@continue

PHPのcontinueと同じ使い方。

$loop変数

$loop->index 現在のインデックス(0, 1, 2, …)
$loop->iteration 現在の繰り返し数(1, 2, 3, …)
$loop->remaining あと何回繰り返すか
$loop->count 配列の要素数
$loop->first 繰り返しの最初かどうか
$loop->last 繰り返しの最後かどうか
$loop->depth 繰り返しのネストの深さ
$loop->parent ネストしている場合の親のループ変数

共通化・再利用関係ディレクティブ

レイアウト関係ディレクティブ

レイアウト関係はこちらにまとめている。

@extends/@yields/@section

  • @extendsでレイアウトとして使う親のビューを指定
  • @yieldで個別ビューで埋めるべきプレースホルダーを指定
  • 個別ビューやサブレイアウトで@sectionを指定し、対応する@yieldを具体の内容で埋める

@show

@parent

部分HTML関係ディレクティブ

@include

@includeディレクティブは、別に準備された共通の部分ビューをその場所に読み込む。第2引数に連想配列を指定して、引数を渡すことができる。

例として、以下は共通して読み込まれる部分ビュー。

そして以下は、@includeで上のHTMLを読み込むビュー。

@component/@slot

@includeと同じように共通の部分ビューを読み込むが、変数を指定するのに連想配列で渡す方法と@slotディレクティブで指定する方法がある。

以下は@componentで読み込まれる部品側のファイル。

そして以下は、この部品を読み込んで使う親のファイル。

@each

@eachディレクティブは、配列やコレクションの内容を取り出しながら、その内容を繰り返してビューに適用していく。

ビュー2はコレクションが空のときに使われるビュー。

たとえば以下のような部分ビューを準備しておいて、

以下のように@eachを使うことで、配列の要素1つずつに同じ部分ビューの内容を適用させることができる。

この結果、@componentの時と同じようなリストが配列の要素に対応して作られる。

@import/@component/@eachの使い分け

これら3つを使い分けるシーンについて、以下のように考えてみた。

@import
ある程度の規模の定型部分ビューの一部を変数で与えながら再利用する場合。
@component
個別ビューでHTMLの一部を設定しながら一定の構造を持たせる場合。
@each
コレクションの内容に応じたリスト項目の表示など、部分HTMLに対して定型で内容が変化する場合。