【Laravel】viewのBladeでif文を書くメリットと書き方
【Laravel】viewのBladeでif文を書くメリットと書き方
Laravel Blade if というキーワードで訪問してくださる方がいるのでそこだけ切り抜いてまとめて見たいと思います。
Bladeとはいったい何?
BladeとはLaravelに実装されているView用のテンプレートシステムです。
これはページのセキュリティ対策の一端になっていたり、基本的なAuth情報を保持していてくれたりなど便利な機能をたくさん持っています。
それでも一番活用されているのは【ヘッダー/フッター/ボディー共通部分/ボディー入替部分】などページを構成するHTMLをパーツに分けて組合わせる事が出来る『テンプレートとしての用途』だと思います。
PHPベタ打ちでもInclude使えば出来る事なのですが、Bladeの方が見た目にスッキリと書けます。
この見た目と言うのがとても大切で、結果としてミスの箇所が判り易くなり構築スピードが上がります。
Bladeの特徴的な書き方
- 配列の中身は { { オブジェクト名->カラム名 } } で要素をテキスト化して表示
- Viewでよく使われる基本的な命令は【 @if 】の様に命令を記載する事で構築できる
- @で開始した命令は基本的に必ず @endif など専用の終了符号で終了しなくてはならない
- 1行で完結する命令は終了符号を使わなくてよい ※@includeなど
- <?PHP ;?> や<script></script>等の利用もできる
<?PHP で書き始めたViewと大きく違うのは中に書き込む文字の数です。
Blade を使った方が圧倒的に短く済みます。
例えば、<?PHP で書き始めた場合ページ上に表示させるためには【 echo ●●●;】としなくてはなりませんが、Blade ではこのechoが不要です。たったこれだけの事でも膨大なHTMLの波がどれだけスッキリするか。
両方書いた経験がある人はとても実感する所だと思います。
まぁこう言った【表示/操作/リレーション】などを分けて書くのはフレームワーク共通なので初フレームワークの方以外は「既知」で「当たり前の事」だと思います。
Bladeの中でif文ってどう書くのか
前の項で書いてしまいましたが、【@】を付けてそのまま記載します。
1 2 3 4 5 6 7 |
@if($calls[0] ==='pc') <input id="tab01" type="radio" name="tab_item" checked> <label class="tab_item" for="tab01">モール接続で使うパスワード</label> @else <input id="tab01" type="radio" name="tab_item" checked> <label class="tab_item" for="tab01">MallPass</label> @endif |
上の例は閲覧者のterminalを取り出してPCでの閲覧だったら文字を長く、スマホ等だったら文字数を短く調整するというモノです。こう言った形で、Controllerから送った値を元に【@if( )】で場合分け最後に【@endif】を書いてif文を閉じます。
Bladeを使わない場合はこんな感じになります。
1 2 3 4 5 6 7 8 9 |
<?PHP if($calls[0] ==='pc'){ echo "<input id="tab01" type="radio" name="tab_item" checked>"; echo "<label class="tab_item" for="tab01">モール接続で使うパスワード</label>"; }else{ echo "<input id="tab01" type="radio" name="tab_item" checked>"; echo "<label class="tab_item" for="tab01">MallPass</label>"; } ?> |
HTMLの文章の中にHTMLなのにPHPとして記載する部分が出てくることがパッと見の判り易さと理解を阻害します。便利なテキストエディタの色づけもズレますし。
IF文の配列とオブジェクトの表記の違い
PHPには似て非なる【配列】と【オブジェクト】があります。
PHPを触り出した最初に悩むところかもしれません。
Laravelでももちろんこの違いがあり、値の取り出し方が違います。
- 配列は [ ] にkeyを入れて取り出す
- オブジェクトは -> (アロー演算子)で取り出す
基本的にSQL文を利用してテーブルから抽出したものはobjectとなり、Controllerでarrayに入れて作ったものは配列になります。SQL文をforeachなどで回して必要な値だけ【 $array[] = array(○,■,△);】ってしたりするとこれは配列です。
if文を調べる方の中でこの辺りが混乱している方がいらっしゃるようです。
配列の値でIF文を書く時は [ ] で囲って指示する
例:$array = array(‘id’=>1,’name’=>’山田’,’item’=>’ミネラルウォーター’);
1 2 3 4 5 6 7 |
@if($array['name'] ==='山田') {{$array['name']}}が購入したものは{{$array['item']}}です。 <!-- 「山田さんが購入したものはミネラルウォーターです。」が表示される --> @else 購入者は{{$array['name']}}さんです。 <!-- 「購入者は山田さんです。」が表示される --> @endif |
例の山田が佐藤となったあ場合は@elseが出力され「購入者は佐藤さんです。」が出力されます。
これがobjectになると下の様になります。
オブジェクトの値でIF文を書く時は -> で指示する
1 2 3 4 5 6 7 |
@if($array->'name' ==='山田') {{$array->'name'}}が購入したものは{{$array->'item'}}です。 <!-- 「山田さんが購入したものはミネラルウォーターです。」が表示される --> @else 購入者は{{$array->'name'}}さんです。 <!-- 「購入者は山田さんです。」が表示される --> @endif |
BladeでIF文を書くメリット
もう単純に一言です。
「コードがスッキリする」
表示内容をifで分岐させたいからこそIF文を書こうとしているのだと思います。
その時に「ここからはHTMLでここまでがPHPで…」と言うのは正直煩わしいです。
煩わしいだけでなく、メンテナンスの際に混乱してきます。
フレームワークの良い所は【表示】と【(SQL等の)加工】を別のファイルに記載する事です。
その恩恵を得られるViewの書き方がBladeだと思っていれば間違いないと思います。
まとめ
記載した後で読み返してみましたが、まとめ方が下手ですね。
よく使うので当たり前すぎて「どうまとめてよいのか」悩みが出ているような気がします。
いつかもう少しまともに理解しやすくしようと思います。
-
前の記事
【VBScript(WSH)】「終了していない文字列型の定数です」エラーの対処方法 2020.10.20
-
次の記事
Googleの商品検索(ショッピング)に記載させるための表記について 2020.10.22