この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:8
ページ更新者:T
更新日時:2019-04-01 00:56:48

タイトル: ViewComposerを用いてviewに共通の値を付与する方法
SEOタイトル: 【Laravel】ViewComposerを用いてviewに共通の値を付与する方法

Layoutで必ず取得しなければならない値をわざわざ一つずつのコントローラーで取得するのは冗長的である。

当問題はViewComposerという機能を用いて解決することができる。

 

プロバイダーの作成

php artisan make:provider ComposerSeriviceProvider

 

プロバイダーの登録

config/app.phpに以下の記述を追加する。

'providers' => [

    ...

    App\Providers\ComposerSeriviceProvider::class,

]

 

サービスプロバイダー

<?php

namespace App\Providers;

use App\Http\ViewComposers\CommonComposer;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerSeriviceProvider extends ServiceProvider
{
    /**
     * コンテナ結合の登録
     *
     * @return void
     */
    public function
boot()
    {

        // クラスベースのコンポーザを使用する
         View::composers([
            CommonComposer::class => [
                'layout.*',
                'admin.*'
            ]
        ]);

        View::composer(
            'profile', 'App\Http\ViewComposers\CommonComposer'
        );

        // クロージャベースのコンポーザを使用する
        View::composer('dashboard', function ($view) {
            //
        });

    }
}

 

コンポーザー(クラスベースの場合)

<?php

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use App\Repositories\UserRepository;

class CommonComposer
{
    /**
     * userリポジトリの実装
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * 新しいプロフィールコンポーザの生成
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        // 依存はサービスコンテナにより自動的に解決される
        $this->users = $users;
    }

    /**
     * データをビューと結合
     *
     * @param  View  $view
     * @return void
     */
    public function
compose(View $view)
    {

        $view->with('aaa', 'bbb')
           
->with('ccc', 'ddd');
    }
}