You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:35:16