如何向Laravel布局模板app.blade.php传动态数据集用于导航栏循环?
实现Laravel Blade布局中导航栏的动态数据循环
步骤1:准备导航数据
可以通过以下几种方式获取导航数据,适配不同的使用场景:
全局视图共享(推荐):在
AppServiceProvider的boot方法中添加代码,让所有视图都能访问导航数据use App\Models\Navigation; // 假设你的导航模型为Navigation public function boot() { // 筛选启用状态的导航项并按排序字段排序 $navItems = Navigation::where('status', 1)->orderBy('sort')->get(); view()->share('navItems', $navItems); }布局内直接获取:如果仅需在布局中使用,可直接在
app.blade.php内查询@php $navItems = \App\Models\Navigation::where('status', 1)->orderBy('sort')->get(); @endphp
步骤2:在app.blade.php中循环渲染导航栏
找到导航栏的HTML结构,将静态菜单替换为动态循环代码:
<nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container"> <a class="navbar-brand" href="/">首页</a> <div class="collapse navbar-collapse"> <ul class="navbar-nav mr-auto"> @foreach($navItems as $item) <li class="nav-item"> <a class="nav-link" href="{{ $item->url }}">{{ $item->name }}</a> <!-- 支持嵌套子菜单 --> @if($item->children->isNotEmpty()) <ul class="dropdown-menu"> @foreach($item->children as $child) <li><a class="dropdown-item" href="{{ $child->url }}">{{ $child->name }}</a></li> @endforeach </ul> @endif </li> @endforeach </ul> </div> </div> </nav>
步骤3:子视图继承后自动生效
所有通过@extends('app')继承布局的子视图,无需额外传递变量,会自动加载动态渲染的导航栏。
注意事项
- 确保
Navigation模型包含对应字段(如name、url、sort、status),若有子菜单需定义children关联方法 - 如需权限控制,可在查询数据时添加权限筛选,或在循环中使用
@can指令过滤菜单
内容的提问来源于stack exchange,提问作者Anurag CK
相关产品推荐
相关产品推荐

