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

ビューコンポーザーの使い方は以上です。
コメント/ピンバック