在Backpack Laravel中向侧边栏传递菜单项列表的实现咨询
实现方案
以下是两种符合Laravel开发规范的实现方式,可根据实际需求选择:
方法1:使用Laravel视图合成器(通用方案,适配所有自定义视图传参场景)
这是Laravel原生支持的标准方案,不需要追踪视图渲染链,也不需要在每个@include语句中透传变量:
- 第一步:创建视图合成器类
新建app/Http/View/Composers/SidebarComposer.php文件,代码示例如下:<?php namespace App\Http\View\Composers; use Illuminate\View\View; use App\Models\MenuItem; // 替换为你自己的菜单项对应模型 class SidebarComposer { public function compose(View $view) { // 替换为你自己的菜单项查询逻辑 $menuItems = MenuItem::where('is_active', 1)->orderBy('sort')->get(); // 将数据绑定到目标视图 $view->with('menuItems', $menuItems); } } - 第二步:注册视图合成器
打开app/Providers/AppServiceProvider.php,在boot方法中添加注册逻辑:public function boot() { // 第一个参数为sidebar_content对应的视图名称,Backpack默认的sidebar_content视图命名为backpack::inc.sidebar_content \View::composer('backpack::inc.sidebar_content', \App\Http\View\Composers\SidebarComposer::class); } - 第三步:直接在视图中调用变量
完成配置后,你可以直接在sidebar_content.blade.php中使用$menuItems变量渲染菜单,不需要额外传参,也不需要在视图层编写数据库查询逻辑。
方法2:使用Backpack内置的菜单配置(仅适用于修改Backpack默认侧边栏菜单场景)
如果你是要扩展Backpack默认的侧边栏导航,不需要自定义视图,直接修改config/backpack/ui.php中的menu配置项即可,支持传入闭包动态生成菜单:
'menu' => function() { // 这里编写菜单项查询逻辑,返回符合Backpack菜单结构的数组即可 return \App\Models\MenuItem::where('is_active', 1)->orderBy('sort')->get()->map(function($item) { return [ 'text' => $item->name, 'url' => $item->url, 'icon' => $item->icon, ]; })->toArray(); },
该方案是Backpack官方推荐的动态菜单实现方式,不需要额外自定义视图和合成器
内容的提问来源于stack exchange,提问作者Nadia
相关产品推荐
相关产品推荐

