【入門】LaravelのBlade(view)についてまとめ

概要

LaravelのBlade(view)について書き方や使えるディレクティブなどをまとめてみました。

※laravel5.8で検証しています。

Blade(view)に値を渡すには?

controllerで下記のようにやったり

return view("hoge_view", ['title' => 'codelike'])

下記のように書いたりできます。

return view("hoge_view")->with(['title' => 'codelike'])

laravelのbladeの基本的な使い方

ファイルの場所

resources\views* の配下にbladeファイルを配置します。
ファイル名は [ビュー名].blade.php となります、controllerから呼ぶときはビュー名だけを指定します。

親レイアウトと子レイアウトを分ける

resources\views\layouts\parent.blade.phpが親ファイルだった場合で
ファイルの内容が下記のように記載していたら

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>{{ config('app.name') }}</title>
</head>
<body>
<div class="container">
    @yield('content')
</div>
</body>
</html>

子のファイルのほうは下記のように記載します。

@extends('layouts.app')

@section('content')
    <div>
        {{ $hoge }}
    </div>
@endsection

@extends(‘layouts.app’)で親のファイルを呼び出して、@sectionで指定したキーのものを親ファイルに展開しているような感じです。

親と子でファイルを分けることで、ヘッダーやフッターなどを共通定義してviewを簡素化するために使います。

変数や変数内のHTMLを展開する

コントローラーで受け取った値を展開したり、ヘルパーを利用するときは {{ $hoge }} みたいな感じで中括弧2つの中に書きます。
HTMLを展開したい場合は {{!! $hoge !!}} みたいに!を入れて書きます。タグをcontroller側で動的に作って、viewに渡すときに使います。

Bladeで使えるディレクティブ

@inclue

読み込みたいbladeファイルを呼び出すことができる。
第二引数にbladeに渡したい値を配列で書ける。

例) @include('layouts.header')  @include('layouts.footer', ["company_name" => 'codelike'])

@yield

@sectionディレクティブで定義した内容を展開する。
第二引数をつけると埋め込み対象のセクションが未定義の場合に描画される。

例)
@yield('content')

@yield('content', View::make('view.name'))

@section

セクションの第一引数の名前で文字列やHTMLタグを定義できる。
呼び出すときは@yieldディレクティブを使用する

例)
@section('title', 'Page Title')

@section('content')
    <div>
        {{ $hoge }}
    </div>
@endsection

@extends

継承する親レイアウトを子のビュー定義する。

例)
@extends('layouts.app')

@empty

値がemptyかどうかを比較する。phpのemptyと同じ。
間にelseをはさむことも可能。

例)
@empty(1)
  ok!
@endempty

@empty($hoge)
  a
@else
  b
@endempty

@isset

値が設定かどうかを比較する。phpのissetと同じ。
間にelseをはさむことも可能。

例)
@isset($hoge)
  ok!
@endisset

@isset($hoge)
  a
@else
  b
@isset

@foreach

foreach文が書ける

例) @foreach($data as $key => $val)
    {{ $key }}:{{ $val }}<br>
@endforeach

@for

for文が書ける

例)
@for($i = 0; $i < 10; $i++)
    hello.{{ $i }}<br>
@endfor

@while

while文が書ける

例)
@php
 $i = 0
@endphp
@while($i < 10)
    hello.{{ $i++ }}<br>
@endwhile

@if

if文が書ける

例)
@if(1)
 123
@else
 456
@endif

@csrf

formをpostするときに無いとエラーになる。
formの中に書いておく。
参考:(Laravel 5.8 CSRF保護)
CSRF保護 5.8 Laravel

@dd

laravelのddヘルパと同じ。指定された箇所で値をダンプしてスクリプト実行を止める。
デバッグに使う。

例)
@dd($hoge)

@dump

laravelのdumpヘルパと同じ。指定された箇所で値をダンプする。
デバッグに使う。

例)
@dump($hoge)

@php

phpコードを直接書くことができる。ビューが汚くなると思うので、あまり使わないほうがいいと思われる。

例)
@php
  echo 3 + 2;
  echo "hoge";
  phpinfo();
@endphp

参考

Laravel 5.8 Bladeテンプレート

コメント

タイトルとURLをコピーしました