2017-06-13 53 views
1

我試圖將查詢結果分享給所有視圖,但似乎並不奏效。在laravel中的每個視圖共享變量似乎不起作用

我有我的分類模型中,這

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()方法:

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

你應該打電話給服務提供商的boot方法內共享。您可以自由將它們添加到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); 
}