PHPフレームワーク「Laravel」ディレクティブ-分岐処理(条件分岐)-

前回はBladeテンプレートを利用する解説を行いました。

Bladeテンプレート内では様々なディレクティブを利用可能となりますが、今回は条件分岐に関するディレクティブを解説します。

PHPの条件分岐について詳しくは「PHP 条件分岐」を参照してください。

ディレクティブとは?

Laravelでのディレクティブとは「@〜」で記述し指定の処理を記述する方法です。

Laravelでは主に「分岐処理を行うディレクティブ」「繰り返しのディレクティブ」「レイアウト作成用ディレクティブ」などがあります。

今回は「分岐処理」のディレクティブについての解説となります。

@if

指定の条件の正誤によって出力内容などを変化させることができます。
@if」で始まり「@endif」で終了となります。

以下が上記の表示結果です。
@ifの条件が「false」に設定されているので「<p>TRUE時に表示</p>」部分は非表示となっています。

また、「@elseif」「@else」を利用して複数の条件指定し分岐することが可能となっています。

下記のコードは$strに代入された値によって表示を分岐させています。
@ifの条件に当てはまらなければ@elseifの条件を確認、@elseifの条件にも当てはまらなければ@else以降が表示され$strに代入された値を{{$str}}で表示しています。

以下が上記の表示結果です。

@ifの使い所

@ifは与えられた変数の内容を確認しそれぞれの条件にあった結果を表示するために利用するのが望ましい利用方法です。

下記は実践的な利用方法として例を挙げてみました。
会員の状態を判別する「$type」の値によって表示する内容を変更しています。

いずれの会員種別にも適合しない場合は「会員登録を行ってください」が表示される仕様となっています。

@unless

@if」の逆の振る舞いを行うのが「@unless」です。
指定された条件がfalseの場合、@unless以降が表示されます。

@empty

渡された値が空の場合に表示を行います。

@emptyの注意点

@emptyは渡された値が空の場合、表示されると説明しましたたが、渡された値が「0」や「false」の場合も表示を行います。

以下の2種類のソースは同じ振る舞いをします。

@isset

「@isset」は「@empty」によく似ていますが、「@isset」は渡された値が未定義もしくはNULL以外の時に表示されます。

渡された値が「0」や「false」の時の振る舞い

渡された値に「0」「false」が代入されていた場合は下記のような振る舞いを行います。
「0」や「false」は未定義ではなく、変数に値が代入されているためこのような振る舞いとなります。

※@issetがfalseを返すのは未定義かNULLのみです。

@issetの使い所

@issetは指定の変数が定義されているかを確認するため、<form>からの送信内容を判別することに利用することが最適ではないでしょうか。

テンプレートの設定

コントローラの設定

初回アクセス時は、アクションのindex()で全ての変数が未定義のため@else以降が表示されます。

フォームからpost送信したいには、入力された内容が変数に格納されるので、格納された内容が表示されます。
フォームが未入力時は変数が未定義となるためこの場合も@else以降が表示されることとなります。

用途にあったディレクティブを利用する

分岐処理(条件分岐)だけをとっても様々なディレクティブが用意されています。

どのディレクティブも同じような振る舞いを行うことは可能ですが、どのディレクティブを利用するかは、変数に代入される値や型、条件などを考慮して選択する必要があります。

created by Rinker
PHPフレームワークのロングセラー定番解説書が、新バージョン対応で改訂! 本書は、Laravelのインストールから、フレームワークの中心になるModel-View-Controller(MVC)の使い方、開発に役立つ各種機能をわかりやすく解説した入門書です。
created by Rinker
PHPフレームワーク
『PHPフレームワークLaravel入門』(青本)を読み終わった方にお勧め!「もっと知りたかったこと」を本書で詳細に解説!PHPでWebアプリケーションを開発するフレームワークには種々ありますが、圧倒的人気ナンバーワンはLaravel!本書は、2017年9月刊行の大好評『PHPフレームワークLaravel入門』を補足する続編。読者の「これも知りたかった!」という声に応えました!

コメントする

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)