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

Laravel如何设置可在全部blade模板中使用的全局变量

Laravel Blade 全局变量配置方案

方法1:全局视图共享(适合全模板通用的少量数据)

这是实现成本最低的方案,配置后所有Blade模板都可以直接调用对应变量:

  1. 打开app/Providers/AppServiceProvider.php文件
  2. 在boot方法中添加如下代码:
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use App\Models\SiteConfig; // 替换为你实际需要查询的模型类
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // 全局共享站点配置数据
        View::share('site_config', SiteConfig::first());
    }
}

配置完成后在任意Blade模板中都可以直接调用{{ $site_config->title }}等属性。

方法2:视图合成器(适合指定模板绑定数据)

如果不需要给所有模板传参,仅需要给公共布局模板传数据,推荐使用该方案,避免全局数据冗余:
在AppServiceProvider的boot方法中添加如下代码:

// 仅给layouts.app主布局模板传递导航菜单数据
View::composer('layouts.app', function ($view) {
    $view->with('nav_menus', \App\Models\Menu::where('is_show', 1)->orderBy('sort')->get());
});

// 同时给多个视图绑定数据
View::composer(['layouts.app', 'layouts.admin', 'common.footer'], function ($view) {
    $view->with('site_copyright', \App\Models\SiteConfig::value('copyright'));
});

配置完成后只有指定的模板可以拿到对应变量,不会污染其他视图。

方法3:自定义Blade指令(适合复用逻辑场景)

如果需要复用的是带逻辑的输出内容,可以自定义Blade指令实现全局调用:
在AppServiceProvider的boot方法中添加如下代码:

use Illuminate\Support\Facades\Blade;

public function boot()
{
    // 自定义站点名称输出指令
    Blade::directive('siteName', function () {
        $siteName = \App\Models\SiteConfig::value('name') ?? '默认站点名称';
        return "<?php echo '$siteName'; ?>";
    });
}

配置完成后在任意Blade模板中直接使用@siteName即可输出站点名称。

注意事项

  • 全局查询的静态数据一定要加缓存,避免每个请求都访问数据库,可通过Laravel模型缓存或者Cache门面存储数据,降低数据库压力。
  • 模板调用变量时做好空值判断,推荐使用{{ $site_config?->title ?? '默认值' }}的写法,避免数据为空时模板报错。
  • 禁止直接在Blade模板中编写数据库查询逻辑,所有数据获取逻辑都要放在服务提供者或者单独的服务类中处理,保证代码可维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:51:03