Laravel框架@yield无法渲染内容问题咨询及代码排查
问题分析与解决方案
问题原因
- 路由返回错误视图:当前根路由直接返回
welcome视图,但welcome是被content继承的父模板。未加载子视图content时,Blade的模板继承机制不会触发,导致@yield指令无法被正确编译解析(页面显示x@yield('section')就是指令未被处理的直接表现),自然无法填充对应@section的内容。 - 模板继承逻辑未启动:只有当返回的是使用
@extends的子视图时,Laravel才会触发Blade模板继承流程,将子视图的@section内容注入父视图的@yield位置。直接返回父视图时,既没有对应的子视图内容,也无法正常解析Blade指令。
解决方案
1. 修改路由返回子视图
修改routes/web.php中的根路由,让其返回content视图:
Route::get('/', function () { return view('content'); });
此时Laravel会加载content.blade.php,自动触发模板继承逻辑,将子视图中@section('contents')的内容填充到welcome.blade.php的@yield('contents')位置。
2. 验证Blade解析功能(可选)
如果修改路由后仍有异常,可在视图中添加简单验证代码,确认Blade是否正常工作:
在welcome.blade.php中添加:
{{ date('Y-m-d') }}
若页面显示当前日期,说明Blade解析正常;若显示{{ date('Y-m-d') }},则检查视图文件扩展名是否为.blade.php(必须以此结尾才能触发Blade解析)。
内容的提问来源于stack exchange,提问作者newbietypez
相关产品推荐
相关产品推荐

