Laravel Blade中如何让@include的公共页脚模板获取数据库值
公共Blade模板(头部、页脚类)注入数据库数据的实现方案
方案1:全局视图作曲家共享数据(适配全站通用公共模板)
这是Laravel官方推荐的公共组件数据传递方式,无需在每个业务控制器中重复查询、传参。
- 修改项目自带的
App\Providers\ViewServiceProvider服务提供者,在boot方法中绑定公共模板的数据逻辑:
// app/Providers/ViewServiceProvider.php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\DB; public function boot() { // 指定需要绑定数据的公共模板路径,匹配后自动注入变量 View::composer( ['templates.footer', 'templates.header'], function ($view) { // 执行公共模板需要的数据库查询逻辑 $general = DB::table('general')->get(); // 将查询结果注入到对应模板 $view->with('general', $general); } ); }
- 配置完成后,无论哪个页面渲染,只要页面中引用了
templates.footer模板,都会自动加载$general变量,footer.blade.php中编写的循环遍历逻辑可直接运行,无需额外修改:
<footer class="footer padding-medium"> @foreach($general as $key => $data) {{ $data->content }} @endforeach </footer>
- 该方案可直接移除
HomeController.php中重复查询general表的代码,因为全局共享逻辑会把$general变量注入到所有关联模板(包括home.blade.php的内容区块),避免重复代码。
方案2:include 标签手动传参(适合仅当前页使用的局部组件)
如果不需要全局共享数据,仅在当前页面向引入的公共模板传参,可以直接修改@include语法,将需要的变量作为第二个参数传入:
- 修改
master.blade.php中的页脚引入代码:
@include('templates.footer', ['general' => $general])
- 注意该方式的局限:所有引用
master.blade.php的页面,渲染时都必须提前传入$general变量,否则会触发未定义变量的报错,不适合全站通用的页脚场景。
内容的提问来源于stack exchange,提问作者kryz
相关产品推荐
相关产品推荐

