Laravelのbladeってやつをまとめてみた

Author:

PHPフレームワークLaravelのviewではbladeというテンプレートエンジンが使えます。
このブレードってやつについてまとめてみました。

bladeって何なのさ

ブレードはクラスのように階層化したテンプレートエンジンです。
階層化されているので、たとえばフッターとかの決まりきった部分は基底クラスに定義して、bodyの中だけを書いたbladeを読みこむ、という使い方ができます。

サンプル

今回は二つのblade、base.blade.phpとindex.blade.phpがあるとします。
基底クラス側となるbase.blade.phpはこんな風に書かれます。

<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@section('body')
base
@show
</body>
</html>

この@がついている部分がblade用の記述です。
@yieldは変数を読み込んでいるような感じで理解すればいいですね。
echo $titleと書かれているようなもので、$titleは子クラス(クラスじゃないけど)で定義します。

@sectionは関数というかブロックというか、一つのまとまりです。
@sectionの終わりを@showとしているので、base単体で呼んでもこのまま表示されます。

続いて子供側となるindex.blade.phpを見てみましょう。
こんな感じです。

@extends('base')
@section('title')
title sub
@stop

@section('body')
@parent
sub
@stop

@extendsは継承元を記載します。
class index extends baseといった感じ。
んでsectionが二つ書かれていますが、@section(‘title’)はbase側のyieldに入る値です。
次の@section(‘body’)には@parentとあるので、親クラスの@section(‘body’)の中身であるbaseという文字列が読まれ、次にsubという文字列が読まれます。
結果的にこれを読みだすと

<html>
<head>
<title>title</title>
</head>
<body>
base
sub
</body>
</html>

となるわけです。

Controllerから呼ぶ

呼び方は普通にviewを呼ぶのと一緒。
public function index()
{
return view(‘test/index’, [‘value’ => 1]);
}

この場合はresource/views/test/index.blade.phpというファイルがあればそっちを優先して呼ばれます。
無ければresource/views/test/index.phpが呼ばれます。

他の@要素

@yield、@section以外にも色々な@要素があるので紹介します。

{{ $var }} – echo $varと一緒です。htmlentitiesが自動でかぶさります。昔は{{{ }}}と{{ }}でエスケープする、しないが分かれていたようだけど5系はどっちもエスケープするっぽい。
{{ $var or ‘default’ }} – echo $var !== null ? $var : ‘default’のような感じ。
{{– Comment –}} – コメントです。

@extends(‘layout’) – 親ブレードを指定します。

@if(condition) – ifです。コントローラーから渡した変数が使えます。
@else – elseです。
@elseif(condition) – elseifです。
@endif – ifの終わりです。

@foreach($list as $key => $val) – phpのforeachと同じです。
@endforeach – foreachの終わりです。

@for($i = 0; $i < 10; $i++) - phpのforと同じです。 @endfor - forの終わりです。 @while(condition) - phpのwhileと同じです。 @endwhile - whileの終わりです。 @unless(condition) - if (!condition)という意味です。 @endunless - unlessの終わりです。 @include(file) - 他のブレードを読み込みます。 @include(file, ['var' => $val,…]) – 他のブレードを読み込み、変数を与えます。

@each(‘viewfile-to-render’, $data, ‘variablename’) – foreach($data as $variablename)という形式でviewfile-to-renderブレードを読み込みます。
@each(‘viewfile-to-render’, $data, ‘variablename’,’optional-empty-viewfile’) – 上記と同様ですが、$dataが空の場合はoptional-empty-viewfileを読み込みます。

@yield(‘section’) – sectionを当てはめる場所です。

@section(‘name’) – セクションの開始を示します。
@show – セクションの終わりを示します。showはそのまま表示されます。
@stop – セクションの終わりを示します。stopはyieldの場所にしか表示されません。
@endsection – Laravel3の頃に使われていたセクションの終わりです。現在でも使えます。
@append – 上位ブレードで同じセクションがあった場合、追記されます。
@overwrite – 上位ブレードで同じセクションが合った場合、上書きされます。
@parent – 上位ブレードのセクションをそのまま読み込みます。

@lang(‘message’) – 現在の言語に沿った文章を表示します。
@choice(‘message’, $count) – 現在の言語に沿った文章を複数形で出す場合に$countが使われます。

こんなもんかな。
まだあったら追記します。

Laravelの使い方とかのまとめ

Share on Facebook
Pocket