本記事では、
Laravelのbladeで使えるディレクティブについて、使い方を解説していく。
(Laravel) bladeとは
Laravelのbladeとは、
Laravelで使われているテンプレートエンジンのことだ。
テンプレートエンジンとは、
画面表示のファイルを分かりやすく、簡単に作ることができる様にしたもので、
PHPでは有名なのでいくとちょっと古いがSmartyなどが挙げられる。
Laravelではこのbladeと呼ばれるテンプレートエンジンを採用しており、画面の作成時、動的な部分はbladeの機能を使用することで通常のPHPプログラムを記述するよりも簡単かつ分かりやすくソースコードを記述することができる。
(blade) ディレクティブとは
bladeのディレクティブとは、
bladeで使える、@から始まる範囲内で、特定の処理をする記述方法のことだ。
@for (初期値 ; 条件 ; 後処理 )
//繰り返し処理
@endfor
ディレクティブのおかげで、画面の動的部分のコードをスッキリと記述することが可能となる。
従来のphp通りの想像しやすいディレクティブ
ディレクティブがなんなのか全くわからない人でも、
下の例を見れば使い方は容易に想像できると思うので、簡単に紹介する。
if文のディレクティブ
@if (条件)
//処理
@elseif ()
//処理
@else
//処理
@endif
普通のif文と違うのは、中かっこが無いことだ。
@と@endの間に処理を書いていく。
for文のディレクティブ
@for (初期値 ; 条件 ; 後処理 )
//処理
@endfor
foreach文のディレクティブ
@foreach ($配列 as $変数)
//処理
@endforeach
while文のディレクティブ
@while (条件)
//処理
@endwhile
上記繰り返しの処理(for、foreach、while)中で、下記ディレクティブを使用することも可能。
- @break
- @continue
これも普通通りのルール(処理抜け、処理スキップ)と変わらない。
注意点としては、処理を途中で遮るだけなので、@endbreakとかは書かなくて良い。
繰り返し処理で使える特殊な$loop変数
bladeでは$loopという、
繰り返し処理で使える特殊な変数が存在する。
実態はオブジェクトで、
「$loop->取り出したい値」とアクセスすることで、
繰り返し処理中の様々な情報(プロパティ)にアクセスすることが可能となる。
以下$loop変数の様々なプロパティへのアクセスまとめ
- $loop->index 現在のインデックス(ゼロから開始)
- $loop->iteration 現在の繰り返し回数(1から開始)
- $loop->remaining あと何回繰り返すか(残り回数)
- $loop->count 繰り返しで使っている配列の要素数
- $loop->first 最初の繰り返しかどうか(最初ならtrue)
- $loop->last 最後の繰り返しかどうか(最後ならtrue)
- $loop->depth 繰り返しのネスト数
- $loop->parent ネストしている場合、親の繰り返しのループ変数を示す
bladeで使える特殊なディレクティブ
次は、
bladeで使える特殊なディレクティブについて紹介していく。
unless文のディレクティブ
@unless (条件)
//処理
@else
//処理
@endunless
unlessディレクティブは、
ifの真逆の働きをするディレクティブだ。条件がfalseの場合に分岐に入る。
なのでelse文を加えた場合、本来trueのものがelseの分岐に入る
empty文のディレクティブ
@empty (変数)
//処理
@else
//処理
@endempty
emptyディレクティブは、
条件に指定した変数が空の場合に分岐に入ってくるディレクティブだ。
なのでelse文を加えた場合、空でない場合にelseの分岐に入ってくる
isset文のディレクティブ
@isset (変数)
//処理
@else
//処理
@endisset
issetディレクティブは、
変数そのものが定義されているか判断するディレクティブだ。
変数が定義されている、かつnullでない場合に、trueとなる。
なのでelseを加えた場合や、変数が未定義の場合にfalseとなる。
phpを記述できるディレクティブ
@php
//処理
@endphp
phpディレクティブを記述することで、
PHPのスクリプトそのものを書き込むことができる。
ただ、注意点として、
bladeはあくまでviewなので、このディレクティブでモリモリ複雑なphpを書き込むことは推奨されない。
関連記事
https://laravel.com/docs/9.x/blade