この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:2
ページ更新者:guest
更新日時:2019-03-31 15:12:37

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

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

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

 

プロバイダーの作成

php artisan make:provider ComposerSeriviceProvider

 

サービスプロバイダー

<?php

namespace App\Providers;


use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class CommonServiceProvider extends ServiceProvider
{
    /**
     * コンテナ結合の登録
     *
     * @return void
     */
    public function
boot()
    {
       
View::composer(
           
['layout.*', 'menu'], //layout配下の全てのビューとmenuビューに適用
           
'App\Http\ViewComposers\CommonComposer'
        );
    }
}

 

 

コンポーザー

<?php

namespace App\Http\ViewComposers;

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

class ProfileComposer
{
    /**
     * 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('count', $this->users->count());
    }
}