2015-10-21 41 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,