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

Laravel全站侧边栏实现:如何全局注入数据避免Ajax请求?

Laravel 全局注入侧边栏数据方案

方法一:视图 Composers(推荐)

视图 Composers 能将数据绑定到指定视图,每次视图渲染时自动注入,无需在每个控制器手动添加数据。

  • 步骤1:创建视图 Composer 类
    在 app/View/Composers 目录下新建 SidebarComposer.php:
<?php

namespace App\View\Composers;

use Illuminate\View\View;
use App\Models\SidebarItem; // 替换为你的侧边栏数据模型

class SidebarComposer
{
    public function compose(View $view)
    {
        // 从数据库查询侧边栏内容,可根据业务添加筛选、排序逻辑
        $sidebarContent = SidebarItem::where('status', 'active')
                                    ->orderBy('sort_order')
                                    ->get();
        
        // 将数据注入视图
        $view->with('sidebarContent', $sidebarContent);
    }
}
  • 步骤2:注册视图 Composer
    在 app/Providers/AppServiceProvider.php 的 boot 方法中添加注册逻辑:
use Illuminate\Support\Facades\View;
use App\View\Composers\SidebarComposer;

public function boot()
{
    // 绑定到你的布局视图(比如 layouts/app.blade.php),仅该布局渲染时触发
    View::composer('layouts.app', SidebarComposer::class);
    
    // 若需全局所有视图都注入,可使用通配符*
    // View::composer('*', SidebarComposer::class);
}

完成后,直接在布局模板中使用 $sidebarContent 即可,无需修改任何控制器代码。

方法二:全局视图共享

如果所有页面都需要侧边栏数据,可通过服务提供者直接共享全局数据:

在 app/Providers/AppServiceProvider.php 的 boot 方法中添加:

use Illuminate\Support\Facades\View;
use App\Models\SidebarItem;

public function boot()
{
    // 查询侧边栏数据
    $sidebarContent = SidebarItem::where('status', 'active')
                                ->orderBy('sort_order')
                                ->get();
    // 全局共享数据
    View::share('sidebarContent', $sidebarContent);
}

注意:该方式会在每个请求时执行数据库查询,即使当前页面不需要侧边栏(如API接口)。仅当所有页面都依赖侧边栏时推荐使用。

是否需要手动在控制器添加数据?

不需要。Laravel 提供的视图 Composers 和全局共享机制,就是为了解决多视图重复数据注入的问题,完全替代手动添加的繁琐操作,符合DRY(Don't Repeat Yourself)原则。

只有一种极端场景需要手动添加:侧边栏数据需根据每个控制器的独特业务逻辑动态生成,且无法提炼为统一的全局规则。但这种情况非常少见,绝大多数场景下全局注入都能满足需求。

内容的提问来源于stack exchange,提问作者Hoytman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:05:13