Laravel中如何在app.blade.php中校验BaseController共享的$headerData变量
你可以直接在Blade模板里做变量存在性校验,也可以从根源上解决异常页拿不到共享变量的问题,两种方案如下:
方案1:在app.blade.php中直接校验变量(快速解决报错问题)
把原来的输出代码{!! $headerData !!}替换成以下任意一种写法即可:
- 完整判断写法,支持自定义缺省内容:
@isset($headerData) {!! $headerData !!} @else {{-- 变量不存在时可以在这里输出默认头部内容,不需要的话留空即可 --}} @endisset
- 简化一行写法,变量不存在时直接输出空内容:
{!! $headerData ?? '' !!}
两种写法都不会触发未定义变量的报错。
方案2:从根源解决所有页面(含404、500等异常页)的变量共享问题
你现在的View::share逻辑写在基础控制器的构造方法里,而404等异常页走的是Laravel的异常处理流程,不会触发普通控制器的初始化,所以拿不到变量。如果希望所有页面都能正常获取到$headerData,可以把共享变量的逻辑移到服务提供者的boot方法中:
- 打开
app/Providers/AppServiceProvider.php文件 - 调整boot方法的代码:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\View; use Illuminate\Http\Request; use App\Helpers\HeaderData; // 替换成你HeaderData类对应的实际命名空间 class AppServiceProvider extends ServiceProvider { public function boot(Request $request) { View::share('headerData', HeaderData::getData($request)); } }
修改后不管是正常业务页面还是异常错误页,都会自动注入$headerData变量,不需要再做额外的存在性判断。
内容的提问来源于stack exchange,提问作者chu
相关产品推荐
相关产品推荐

