Laravel Blade引擎@yield与@section指令不生效问题排查
故障根本原因
路由配置错误,访问根路径时直接渲染了父模板welcome.blade.php,并未加载定义了example区块内容的子模板,导致@yield('example')无法获取到填充内容。
Blade模板继承的生效逻辑如下:
- 渲染子模板时,子模板通过
@extends声明要继承的父模板,再把自身@section定义的区块内容,填充到父模板对应的@yield位置,最终合并输出完整页面。 - 当前代码中
@section('example')的内容写在views/pages/dadmin.blade.php子模板中,但路由直接返回view('welcome')渲染父模板时,框架不会加载子模板的代码,预留的@yield('example')位置找不到对应填充内容,自然显示为空。
修复方法
修改路由文件中的返回视图逻辑,渲染对应子模板即可:
Route::get('/', function () { return view('pages.dadmin'); });
可选优化:如果需要直接渲染父模板时@yield位置也有兜底内容,可以给@yield传入第二个参数作为默认值,示例:
@yield('example', '<p>这是默认展示的兜底内容</p>')
内容的提问来源于stack exchange,提问作者Loko
相关产品推荐
相关产品推荐

