将数据从控制器传递到主视图

时间:2018-05-23 13:01:15

标签: php laravel laravel-blade

我正在使用Laravel,并且我有大量的index.blade.php页面扩展了master.blade.php页面,现在master需要一些数据,例如菜单项列表。< / p>

当我想查看Aircraft我的这条路线列表时:

Route::get('aircrafts', 'AircraftsController@index');

这是方法AircraftsController@index

public function index(){
    $aircrafts = Aircraft::all();
    $menus = Menu::all();
    return view('aircrafts.index', compact('menus', 'aircrafts'));
}

如何看待我必须将$menus传递给每个控制器中的每个视图,如果在某个时刻master需要一些其他数据,我将被迫编辑每个控制器......

是否有更智能的方法将数据传递给母版?

我想避免直接在视图中检索感兴趣的数据......

2 个答案:

答案 0 :(得分:1)

在AppServiceProvider中

添加use View;

public function boot()
{
  View::composer('*', function($view){
    $view->with('aircrafts', Aircraft::all());
    $view->with('menus', Menu::all());
});
}

之后用法相同。与@foreach($menus as $foo)

一样

答案 1 :(得分:0)

如果所有视图中都需要数据,那么您可以在服务提供商中尝试view()->share('menus', Menu::all()),否则View::composer()是正确的选择。