【问题标题】:Passing data from controller to master view将数据从控制器传递到主视图
【发布时间】:2025-12-12 18:00:01
【问题描述】:

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

当我想查看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 需要一些其他数据,我不得不编辑每个控制器...

有没有更聪明的方式将数据传递给主节点?

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

【问题讨论】:

    标签: php laravel laravel-blade


    【解决方案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)

    【讨论】:

    • 如果遇到错误请发表评论。我在我的所有项目中都使用这种方法。
    【解决方案2】:

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

    【讨论】:

      最近更新 更多