@extends必须是子模板第一行非空非注释语句,路径为视图别名(如'layouts.app'),区分大小写;@yield与@section名称须逐字符一致,且父模板必须存在对应@yield,漏写@endsection会导致白屏。

@extends 必须是子模板第一行,且路径不能写错
页面空白或 404,八成卡在这步。Laravel 不报具体错误,只渲染失败或显示原始 Blade 语法(比如页面上直接出现 @section 字样)。
-
@extends必须是子模板文件里的第一条非空、非注释语句,前面不能有空格、换行、BOM 或任何输出 - 路径不是文件系统路径,而是视图别名:
resources/views/layouts/app.blade.php对应@extends('layouts.app') - 路径区分大小写,Linux 下
@extends('Layouts.app')和@extends('layouts.app')是两个不同视图 - 别加
.blade.php后缀,也别写./或resources/views/前缀
@yield 和 @section 名字必须完全一致,且父模板里得有 @yield
子模板写了 @section('content') 却没显示?大概率是父模板漏了 @yield('content')——这不是警告,是静默丢弃,内容彻底消失。
- 父模板中每个要被替换的区域,都得有对应
@yield('xxx'),例如@yield('title')、@yield('scripts') -
@yield支持默认值:@yield('description', '暂无描述'),但仅当子模板完全不定义该@section时生效 - 子模板中
@section('content')@endsection的字符串名必须和@yield参数**逐字符一致**(包括大小写、下划线) - 漏写
@endsection会导致整个页面白屏,且 Laravel 可能不抛出明确异常
@parent 不是自动继承,必须显式写出且位置固定
想在子模板里“追加”而非“覆盖”父模板某区块内容(比如标题加前缀),很多人以为写了 @section('title') 就会自动保留父级内容,其实不会。
-
@parent必须手动写进@section内部,且只能放在开头或结尾,不能插在中间 - 例如:
@section('title')用户中心 - @parent@endsection - 如果父模板根本没定义
@yield('title')或对应区块为空,@parent不输出也不报错,容易误判为“没生效” - 多层继承(base → admin → user)中,中间层若要用
@parent,必须确保上一层确实提供了该@yield,否则链路断裂
别用 @include 替代 @extends,两者解决的是不同问题
看到导航栏、页脚重复,第一反应是 @include 拼接?这会导致 @yield 失效、SEO 标题无法动态替换、样式错乱——因为你没走继承流程。
-
@extends是布局控制入口,交出整个渲染权;@include是片段复用,变量作用域独立,不参与继承链 - 公共结构(如 header、footer)适合抽成
@include('partials.header'),但骨架层级(、、全局 JS)必须由@extends承载 - 试图在父模板里用
@include加载子内容,@yield就形同虚设——子模板的@section找不到落点 - 需要多处注入同一区块(比如多个页面都要加 JS),改用
@push('scripts')+@stack('scripts'),而不是重复定义同名@section
实际调试时最容易忽略的,是父模板里 @yield 的存在本身——它不像 PHP 语法那样报错,而是让所有对应 @section 彻底蒸发。先确认父模板有且仅有正确的 @yield,再检查子模板的 @extends 位置和 @section 闭合,比翻日志快得多。


















