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

Laravel:中间件共享的$primary变量在Blade中无法调用的解决方法

Blade模板调用视图共享变量提示未定义的解决方法

问题代码

用户的视图共享中间件代码如下:

public function share(Request $request): array
{
    return array_merge(parent::share($request), [

        'notifier' => fn() => session()->get('notifier'),

        'request_filters' =>  fn() => request()->filter,

        'media' => fn() => Media::query()
            ->when(request()->media_search, fn($q) => $q->search(request()->media_search))
            ->paginate(15),

        'user_roles' => Auth::id() ? Auth::user()->getRoleNames() : [],

        'actual_user' => fn() => session('actual_user') ?? null,

        'company_pages' => fn() => Auth::id() ? Page::forCompany(Auth::company())->forType('page')->get() : [],

        'primary' => 'test',

    ]);
}

尝试在Blade模板中用{{$primary}}调用时,出现"Undefined variable $primary"错误,需解决该问题。

解决方法

  • 确认中间件注册状态
    确保这个自定义中间件已经在app/Http/Kernel.php的web中间件组中注册,只有请求经过该中间件,变量才会被共享到视图。

  • 检查父类方法的键名冲突
    由于使用了array_merge合并父类返回的数组,如果父类share方法返回的数组中存在primary键,会覆盖你定义的值。可以临时在中间件中打印parent::share($request)的内容,排查是否有键名冲突。

  • 直接调用视图共享变量
    如果模板自动解析有问题,可以在Blade中用以下方式直接获取:

    {{ view()->shared('primary') }}
    

    或者通过请求属性获取:

    {{ request()->attributes->get('primary') }}
    
  • 测试延迟加载形式
    尝试将primary改为闭包延迟加载的形式:

    'primary' => fn() => 'test',
    

    然后在模板中调用:

    {{ $primary() }}
    

    如果能正常显示,说明可能是视图变量解析的优先级问题,可根据实际情况调整变量定义方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:40:29