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
相关产品推荐
相关产品推荐

