概要
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
@dd
laravelのddヘルパと同じ。指定された箇所で値をダンプしてスクリプト実行を止める。
デバッグに使う。
例)
@dd($hoge)
@dump
laravelのdumpヘルパと同じ。指定された箇所で値をダンプする。
デバッグに使う。
例)
@dump($hoge)
@php
phpコードを直接書くことができる。ビューが汚くなると思うので、あまり使わないほうがいいと思われる。
例)
@php
echo 3 + 2;
echo "hoge";
phpinfo();
@endphp
コメント