ビュー、Blade操作

Tag:

ビューの指定方法、Blade操作方法について取り上げます。

利用するビューを指定

viewヘルパー関数で利用するビューを指定できます。

return view('greeting', ['name' => 'James']);

Blade操作|継承

継承

継承元(layouts.master)

<html>
    <head>
        <title>@yield('title')</title>
        @section('styles')
        <link href="{{ url('css/app.css') }}" rel="stylesheet" type="text/css">        
        @show
    </head>
    <body>
        {{-- サブビュー読み込み --}}
        @include('layouts.header')

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

下記、layouts.masterを継承してみた例です。

@extends('layouts.master')

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

@section('styles')
    @@parent
    <link href="{{ url('css/xxx.css') }}" rel="stylesheet" type="text/css"> 
@endsection

@section('content')
    <p>本文コンテンツ</p>
@endsection

Blade操作|データ表示

{{ }}文は、XSS対策としてエスケープしてくれます。

{{ $name }}

{!! !!}文は、エスケープしません。

{!! $name !!}

変数が存在しない場合にデフォルト値を表示。

{{ $name or '' }}

改行が含まれる値を表示したいとき。

{!! nl2br(e($value)) !!}

コメント

{{-- コメント --}}

Blade操作|制御構文

if文

@if (条件1)
    <!-- 処理1 -->
@elseif (条件2)
    <!-- 処理2 -->
@else
    <!-- 処理3 -->
@endif

for文

@for ($i = 0; $i < 5; $i++)
    {{ $i }}
@endfor

foreach文

@foreach ($users as $user)
    <p>{{ $user->id }}</p>
@endforeach

CSRF対策

csrf_field関数を使うと、CSRF対策用のトークン値を持つフィールドを生成してくれます。

<form method="POST" action="{{ url('login') }}">
    {{ csrf_field() }}
</form>

「VerifyCsrfTokenミドルウェア」にて、「リクエストのトークン」と「セッションのトークン」が一致するかチェックしてくれます。

複数個所から読み込まれるViewに共通データを渡す

サイドバー上の情報など複数ページで利用されるビューがあります。そういったビューには、毎回データを渡すのではなく、ビューコンポーサーを利用するとよいです。

ビューコンポーサー登録用のサービスプロバイダーを作成

例として、下記のように作成しました。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Post;

class ComposerServiceProvider extends ServiceProvider
{

    /**
     * コンテナ結合の登録
     *
     * @return void
     */
    public function boot()
    {
        // クロージャーベースのコンポーサーを登録
        view()->composer('parts.recent_posts', function ($view) {
            $recentPosts = Post::orderBy('created_at', 'desc')
                    ->take(10)
                    ->get();

            $view->with('recentPosts', $recentPosts);
        });
    }

    /**
     * サービスプロバイダーの登録
     *
     * @return void
     */
    public function register()
    {
        //
    }

}
19~25行目
クロージャーベースでコンポーサーを登録してます。クラスベースでも登録できます(https://readouble.com/laravel/5.1/ja/views.html#view-composersで説明されてます)。

ここでは例として、「parts.recent_posts」というビューが呼び出されるときに、「$recentPosts」というデーターを渡しています。

複数ビューにデータを渡したい場合、下記のようにします。

view()->composer(['view1', 'view2'], function ($view) {

});

全ビューにデータを渡したい場合、下記のようにします。

view()->composer('*', function ($view) {

});

サービスプロバイダーの登録

config/app.phpにて、作成したサービスプロバイダーを登録します。

return [
    'providers' => [

        // ...

        App\Providers\ComposerServiceProvider::class,  // 追加
    ],
];

スポンサーリンク