2015-10-21 45 views
5

我已創建使用控制器一個數據庫驅動的菜單被加載,數據庫驅動的菜單,可以在考慮了

HomeController中延伸,其中菜單在控制器的構造函數加載控制器。

HomeController.php

class HomeController extends Controller 
{ 


    public function __construct() 
    { 
     parent::__construct(); 
     $this->middleware('auth'); 
    } 

    public function index(){ 
     $data['menu'] = $this->menu; 
     return view('home', $data); 
    } 
} 

Controller.php這樣

public function __construct() 
    { 
     $this->user = Auth::user(); 

     $menu = new Menu(); 

     if($this->user != NULL && $this->user != ""){ 
      $this->menu = $menu->getMenu($this->user->user_id); 
     } 
    } 

我怎樣才能調用函數直接在視圖級別,因爲現在,即使菜單在構造函數中加載,我仍然需要將菜單傳遞給視圖,這會使事情變得冗餘。

P/S:使用laravel 5.1

+2

您需要查看作曲家:http://laravel.com/docs/5.1/views#view-composers您可以將變量傳遞給所有或特定的視圖。 – Iamzozo

回答

3

通過以下命令

php artisan make:provider ComposerServiceProvider 

這將在應用程序/供應商創建一個新的文件名ComposerServiceProvider.php生成工匠新的ServiceProvider。在這個新設立的服務提供商的引導功能,您可以像下面創建一個閉合功能:

view()->composer('partials.navbar', function ($view) { 
     $view->with('genre', Genre::all()); 
    }); 

這裏所討論的觀點是navbar.blade.php下視/諧音,這將有一個變量命名可以通過流派出你的應用程序。

爲了讓代碼更清潔,你可以在ComposerServiceProvider中創建一個新的函數,並命名爲partialnav。然後,將執行以下操作:如果你想分開它甚至更多,你可以創建應用程序下的一個新文件夾

public function boot() 
{ 
    $this->partialNav(); 
} 

//create a function independently 

public function partialnav() 
{ 
    //code goes here 
} 

/HTTP命名它可以說ViewCompoers,在此文件夾中創建名爲NavbarComposer.php與一個新的文件下面的代碼:

class NavbarComposer { 


/** 
* Create a new profile composer. 
* 
* @param UserRepository $users 
* @return void 
*/ 
public function __construct() 
{ 
    // Dependencies automatically resolved by service container... 
} 

/** 
* Bind data to the view. 
* 
* @param View $view 
* @return void 
*/ 
public function compose(View $view) 
{ 
    //write your code to fetch the data 
    // and pass it to your views, following is an example 
    $genre = genre::all(); 
    $view->with('genre', $genre); 
} 
} 

現在回到你ComposerServiceProvider的partialnav功能

public function partialNav() 
{ 
    view()->composer('partials.nav', 'App\Http\ViewComposers\NavbarComposer'); 
} 

不要忘了在你的配置/應用程序添加這個新創建的ServiceProvider .php

App\Providers\ComposerServiceProvider::class,