Laravelのビューコンポーザーの使い方

Laravel PHP フレームワーク プログラミング

Laravleのビューコンポーザーの使い方を書きます。

ビューコンポーザーとは

ビューコンポーザーはビューがレンダリングされる時に実行されるクラスまたはメソッドです。

複数のビューで同じデータを表示したい時などにビューコンポーザーを使います。

ビューに関連する処理をコントローラから分離することで、コントローラの肥大化を防ぐことができます。

ビューコンポーザーの使い方の概要

この記事では以下の順番でビューコンポーザーの使い方を説明します。

  • ビューコンポーザーを用意する
  • ビューとビューコンポーザーを関連付けるサービスプロバイダを用意する
  • サービスプロバイダがアプリケーション起動時に実行されるように設定する

ビューコンポーザーを使うために追加、編集するファイルは以下になります。

ファイル名追加/編集概要
app/Http/ViewComposers/TestComposer.php追加ビューコンポーザー本体。
app/Providers/TestServiceProvider.php 追加ビューとビューコンポーザーを関連付ける。
config/app.php編集providers配列にサービスプロバイダを追加する。

ビューコンポーザーを用意する

Laravelではビューコンポーザーの置き場所をデフォルトで用意していません

自分でapp/Http/ViewComposersディレクトリを作成しましょう。

Laravelプロジェクトディレクトリ
┗ app/
  ┗ Controllers/
  ┗ Middleware/
  ┗ Requests/
  ┗ ViewComposers/ ← 追加する

app/Http/ViewComposersディレクトリ以下に動作確認用のビューコンポーザーのファイルを作成します。

ファイル名は「TestComposer.php」とします。

with('test', 'test message');
    }
}

次にビューとビューコンポーザーを関連付けるサービスプロバイダを用意します。

サービスプロバイダ―を用意する

artisanコマンドでサービスプロバイダーのひな型を作る事ができます。

php artisan make:provider TestServiceProvider

app/Providers/TestServiceProvider.phpにファイルが作られます。

php artisan make:providerはサービスプロバイダのひな型を作るコマンドです。

サービスプロバイダの名前は自由につけられますが、「〇〇ServiceProvider」とすると統一感があってよいです。

作成されたひな形は以下のような内容になっています。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class TestServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

ビューとビューコンポーザーを紐づけるために、 register()メソッドを以下のように実装します。

use Illuminate\Support\Facades\View;も追加しています。

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View; // 追加
use Illuminate\Support\ServiceProvider;

class SampleTestProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        // ビューとビューコンポーザーを紐づける
        View::composer(
            'layouts/', 'App\Http\ViewComposers\TestComposer';
        );
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

View::composer()でビューとビューコンポーザーを関連付けています。

ビューの指定はワイルドカードを使う事ができます。

View::composer(‘layouts/*’, …)とする事で、全てのレイアウトビューに対してビューコンポーザーを関連づけることができます。

次にこのサービスプロバイダ―がアプリケーション起動時に読み込まれるように設定します。

サービスプロバイダーを登録する

config/app.phpを編集してサービスプロバイダ―を登録します。

    'providers' => [
        …
        App\Providers\TestServiceProvider::class,
    ],

providersの配列に作成したサービスプロバイダを登録しました。

これでビューコンポーザ―を使う準備ができました。

ビューコンポーザーを使う

ビューコンポーザーはビューのレンダリングと同時に実行されるようになっています。

あとはビューコンポーザーで設定された値をビューで使うだけです。

今回はビューコンポーザーで$view->with('test', 'test message');としているので、ビューで{{ $test }}を使用します。

<div class="hcb_wrap"><pre class="prism line-numbers lang-plane"><code><body>
    <div id="app">
        <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
            <div class="container">
                <a class="navbar-brand" href="{{ url('/') }}">
                    {{ config('app.name', 'Laravel') }}
                </a>
                {{ $test }} ← ビューコンポーザーで設定した値を使う。</code></pre></div>

アプリケーション名の横にビューコンポーザーで指定した文字が表示されるようになりました。

ビューコンポーザーの使い方は以上です。

コメント/ピンバック

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