条件分岐の記述方法
LaravelでBladeを利用する基本が理解できたところで、制御構文の書き方を紹介します。まずは条件分岐からです。
条件分岐の基本のif-elseif-elseの記述方法
Bladeで条件分岐などの制御構文を記述するには「@」を使います。具体的にはリスト6のコードになります。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>テンプレート中のif</title> </head> <body> <p> @if($rand === 1) 大吉です!<br> おめでとうございます! @elseif($rand === 2) 中吉です! @else 凶です! @endif </p> </body> </html>
このテンプレートを表示するルーティング登録コードとしてリスト7のコードを記述したとします。
Route::get("/chap3/if", function() { $data["rand"] = rand(1, 3); return view("chap3.ifStatement", $data); });
1~3の乱数を発生させて、それをrandという名前でテンプレートに送っています。リスト6のテンプレートでは、この$randの値で分岐を行い、大吉、中吉、凶を表示するようにしています。その条件分岐を行っているのが太字のコードです。通常のPHPコードのif-elseif-elseの前に@が付与された記述となっています。この@から始める記述を「ディレクティブ」と呼びます。
条件部分も通常のPHPコードと同じように()を使って記述します。ただし、条件に合致する場合の処理の範囲を表す{}は不要です。その代わり、@から次の@までがその条件に合致する場合に表示する範囲を表し、終端を表す@endifを必ず記述するようにします。
実際に、この処理を行う以下のURLにアクセスしてみます。
- http://localhost/firstlaravel/public/chap3/if
すると、図4の画面が表示されます。
![図4:リスト6が表示された画面](http://cz-cdn.shoeisha.jp/static/images/article/11455/11455_004.png)
リスト6は乱数を使用しているので、表示画面は3パターンあり、図4はそのうちの1つ、乱数値が1の場合です。その場合、「中吉です!」や「凶です!」の部分は表示されておらず、条件分岐がちゃんと働いていることが見て取れるでしょう。
switchによる分岐
テンプレートでの分岐にはswitch文も使えます。リスト6のpタグ内を、switchを使って書き換えるとリスト8のようになります。
~省略~ <p> @switch($rand) @case(1) 大吉です!<br> おめでとうございます! @break @case(2) 中吉です! @break @default 凶です! @endswitch </p> ~省略~
if-elseif-elseと同じようにswitchも通常のPHPコードの前に@がついたような形になっています。注意するべきなのは、caseで値を記述するところに()が必要なところ、@endswitchが必要なところです。また、通常のPHPコード同様に@breakの記述忘れにも注意してください。
その他便利な条件分岐の記法
if-elseif-elseとswitchを知っていれば、条件分岐の記述には困りません。ただ、Bladeにはさらに便利な条件分岐の記述が用意されていますので、リファレンス的に紹介します。
まず、否定の条件を記述する場合には@unlessディレクティブが使えます。例えば、以下の記述です。
@unless($isFinished) <p>isFinishedはfalseです。</p> @endunless
ここで$isFinishedはtrue/falseを表す変数です。この記述は以下の記述と同じ意味です。
@if(!$isFinished) <p>isFinishedはfalseです。</p> @endif
@unlessディレクティブを使うと、条件を否定する「!」を記述する必要がなくなります。
また、変数が渡されてきた場合のみ表示するディレクティブとして@issetディレクティブがあります。例えば、以下の記述です。
@isset($isFinished) <p>isFinished変数は存在します。</p> @endisset
これは、PHPの関数isset()と同じなので、使い方としては以下の記述と同じです。
@if(isset($isFinished))
同様に、empty()関数と同じ使い方ができる@emptyディレクティブもあります。使い方としては以下の記述になります。
@empty($resultList) <p>resultListは空です。</p> @endempty