如何在Laravel Backpack中访问MenuCRUD的子菜单项
问题根因
$item->children返回的是子菜单项的集合实例,不是单个子菜单模型对象,因此不能直接访问->name属性。你调试输出中看到的name字段是集合内部单个子项的属性,需要先遍历集合才能获取对应值。
基础两级菜单实现
直接遍历一级菜单下的子集合即可:
@foreach (\Backpack\MenuCRUD\app\Models\MenuItem::getTree() as $item) {{-- 一级菜单项 --}} <a class="text-gray-500 hover:text-gray-500" href="{{$item->url()}}">{{ $item->name }}</a> {{-- 存在子菜单时遍历输出 --}} @if ($item->children->isNotEmpty()) <div class="pl-4"> @foreach ($item->children as $childItem) <a class="text-gray-500 hover:text-gray-500" href="{{$childItem->url()}}">{{ $childItem->name }}</a> @endforeach </div> @endif @endforeach
无限级嵌套菜单实现
如果需要支持多级子菜单,可使用Blade组件递归调用实现:
- 先创建Blade组件
resources/views/components/menu-item.blade.php
<a class="text-gray-500 hover:text-gray-500" href="{{ $item->url() }}">{{ $item->name }}</a> @if ($item->children->isNotEmpty()) <div class="pl-4"> @foreach ($item->children as $child) <x-menu-item :item="$child" /> @endforeach </div> @endif
- 在业务模板中直接调用组件
@foreach (\Backpack\MenuCRUD\app\Models\MenuItem::getTree() as $item) <x-menu-item :item="$item" /> @endforeach
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

