LoginSignup
18
22

More than 3 years have passed since last update.

【Laravel】Bladeの構文

Last updated at Posted at 2020-07-09

こちらの記事は以下の書籍を参考に執筆しました

Bladeの構文

レイアウト内でヒョ持したり、レイアウトを継承して複数を組み合わせたりするための構文について。

値の表示

{{変数関数等}}

{{}}はHTMLスケープ処理されるためHTMLタグとしては機能しない。
エスケープ処理してほしくない場合は以下のようにする。

{{!! 変数関数等 !!}}

@ifディレクティブ

Bladeにはディレクティブという言語で言う構文が用意されている。
まずは条件分岐(if)に相当するディレクティブから。

条件がtrueの時に表示する。

@if (条件)
...出力内容...
@endif

出典:PHPフレームワークLaravel入門 第2版

条件によって異なる表示をする

@if (条件)
...出力内容...
@else
...出力内容...
@endif

出典:PHPフレームワークLaravel入門 第2版

複数の条件を設定

@if (条件)
...出力内容...
@endif(条件) 
...出力内容...
@else
...出力内容...
@endif(条件) 

出典:PHPフレームワークLaravel入門 第2版

@ifには@else@elseifが用意されている

ディレクティブは何かを実行するのではなく表示する
条件がこれなら表示する、表示しないという動きをする。

@ifを使ってみる

以下のように修正する

index.blade.php
  <body>
    <h1>Blade/Index</h1>
    @if ($msg!='')
    <p>こんにちは、{{$msg}}さん。</p>
    @else
    <p>なにか書いてください</p>
    @endif
    <form action="/hello" method="post">
      @csrf
      <input type="text" name="msg">
      <input type="submit">
    </form>
  </body>

出典:PHPフレームワークLaravel入門 第2版

次はコントローラを修正

    public function index()
    {
        return view('hello.index', ['msg'=>'']);
    }
    public function post(Request $request)
    {
      return view('hello.index', ['msg'=>$request->msg]);
    }

出典:PHPフレームワークLaravel入門 第2版

/helloにアクセスして正常に表示されているか確認する。

特殊なディレクティブ

条件が非成立のときに表示

@unless(条件)
...表示内容...
@endunless

出典:PHPフレームワークLaravel入門 第2版

条件がfalseの時に表示をする。

変数が空の場合に表示

@empty(変数)
...表示内容...
@endempty

出典:PHPフレームワークLaravel入門 第2版

変数が定義済みの場合に表示

@isset(変数)
...表示内容...
@endisset

出典:PHPフレームワークLaravel入門 第2版

emptyと似ているが、これは変数そのものが定義されているかどうかを判定する。

@issetで変数定義をチェックする

@issetを使って例を見てみる。

index.blade.php
  <body>
    <h1>Blade/Index</h1>
    @isset ($msg)
    <p>こんにちは、{{$msg}}さん。</p>
    @else
    <p>なにか書いてください</p>
    @endisset
    <form action="/hello" method="post">
      @csrf
      <input type="text" name="msg">
      <input type="submit">
    </form>
  </body>

出典:PHPフレームワークLaravel入門 第2版

コントローラはこのように

    public function index()
    {
        return view('hello.index');
    }
    public function post(Request $request)
    {
      return view('hello.index', ['msg'=>$request->msg]);
    }

出典:PHPフレームワークLaravel入門 第2版

indexアクションメソッドでは値をテンプレに渡していない。
そのため、テンプレ側では$msgは未定義になる。

繰り返しのディレクティブ

forに相当

@for(初期化;条件;後処理)
...繰り返す表示...
#endfor

出典:PHPフレームワークLaravel入門 第2版

foreachに相当

@foreach($配列 as $変数)
...繰り返す表示...
@endforeach

出典:PHPフレームワークLaravel入門 第2版

foreach-elseに相当

@forelse($配列 as $変数)
...繰り返す表示...
@empty
...$変数が空のときの表示...
@endforelse

出典:PHPフレームワークLaravel入門 第2版

foreachにelseを追加したもの相当する。

whileに相当

@while(条件)
...繰り返す処理...
@endwhile

出典:PHPフレームワークLaravel入門 第2版

繰り返しディレクティブを利用する

index.blade.php
  <body>
    <h1>Blade/Index</h1>
    <p>&#064;foreachディレクティブの例</p>
    <ol>
      @foreach($data as $item)
      <li>{{$item}}</li>
      @endforeach
    </ol>
  </body>

出典:PHPフレームワークLaravel入門 第2版

コントローラ

    public function index()
    {
        $data=['one','two','three','four','five'];
        return view('hello.index', ['data'=>$data]);
    }

出典:PHPフレームワークLaravel入門 第2版

/helloにアクセスするとリストが表示される。
viewメソッドの[data->\$data]でdataに\$dataを設定してテンプレートに渡している。

$loopによるループ変数

$loopでループに関する情報が得られる。

プロパティ 説明
$loop->index 現在のインデックス(0から開始)
$loop->iteration 現在の繰り返しかず(1から開始)
$loop->remaining 後何回繰り返すか(残り回数)
$loop->count 繰り返しで使っているあ配列の要素数
$loop->first 最初の繰り返しかどうか(最初ならtrue)
$loop->last 最後の繰り返しかどうか(最後ならtrue)
$loop->depth 繰り返しのネスト数
$loop->parent ネストしている場合、親送り返しのループ変数を示す。

例を見てみる。

index.blade.php
  <body>
    <h1>Blade/Index</h1>
    <p>&#064;forディレクティブの例</p>
    @foreach($data as $item)
    @if($loop->first)
    <p>データ一覧</p><ul>
      @endif
      <li>No,{{$loop->iteration}}.{{$item}}</li>
      @if($loop->last)
    </ul><p>ーーーここまで</p>
    @endif
    @endforeach

  </body>

出典:PHPフレームワークLaravel入門 第2版

これで確認できる。

phpディテクティブについて

phpディレクティブでPHPスクリプトを直接実行できる。

@php
...PHPスクリプト...
@endphp
index.blade.php
  <body>
    <h1>Blade/Index</h1>
    <p>&#064;phpディレクティブの例</p>
    <ol>
      @php
      $counter=0;
      @endphp
      @while($counter<count($data))
      <li>{{$data[$counter]}}</li>
      @php
      $counter++;
      @endphp
      @endwhile
    </ol>
  </body>

出典:PHPフレームワークLaravel入門 第2版

テンプレに用意する@phpは最小限に、が基本

18
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
22