2017-06-13 12 views
1

私はすべてのビューにクエリの結果を共有しようとしていますが、うまくいかないようです。laravelの各ビューへの変数を共有できません。

私は私のCategoryモデルでこの

public function getAllImageCategories() 
{ 
    $categoires = Category::all(); 
    return $categoires; 
} 

その後、私にHomeControllerで__constructorこの

public function __construct() 
{ 
    $Category = new Category; 
    $allCategories = $Category->getAllImageCategories(); 

    View::share('allCategories', $allCategories); 
    $this->middleware('auth'); 
} 

とビューで

@foreach($allCategories as $category) 
    <li><a href="#"><i class="fa fa-btn fa-sign-out"></i>{!! $category->name !!}</a></li> 
@endforeach 

エラー

を持っています

未定義の変数:allCategories

このエラーはなぜですか?私はここで間違っている?

+0

ますビュー 'allCategories'に共有しているだけです'*'に変換します。 – Ohgodwhy

答えて

1

あなたは、サービスプロバイダのboot()方法にコードを置く必要があります:あなたは、サービスプロバイダのbootメソッド内で共有するために電話をかける必要があります

public function boot() 
{ 
    $Category = new Category; 
    $allCategories = $Category->getAllImageCategories(); 
    View::share('allCategories', $allCategories); 
} 

。あなたはAppServiceProviderにそれらを追加するか、またはそれらを収容するために別個のサービスプロバイダを生成することが自由です。

https://laravel.com/docs/5.4/views#sharing-data-with-all-views

+0

はい、この方法で作業しています。ちょうど質問です: '__construst()'やserviceprovider 'boot()'にあれば、基本的に同じではありませんか? – Ivan

3

私はあなたがすべてのビューページ用のView Composerを使用することをお勧めします。

https://laravel.com/docs/5.4/views#view-composers

そうしないと、

your/project/directroy/app/Providers/AppServiceProvider.php

に移動し、ブート方式にコードを追加し、同じページ 上のすべてのビューでデータを共有を使用することができます

public function boot() 
{ 
    $Category = new Category; 
    $allCategories = $Category->getAllImageCategories(); 
    View::share('allCategories', $allCategories); 
} 
関連する問題