blade模板继承需父子作用域隔离与yield插槽配合;@extends后页面空白主因是父模板缺@yield声明或子模板漏@endsection;路径须用视图别名如@extends('layouts.app');不支持多级继承,禁用嵌套@extends。

Blade 模板继承不是“套壳”操作,而是父子作用域隔离 + yield 插槽机制;直接写 @extends 却不配对 @yield 或漏掉 @section,页面必然空白或报错。
为什么 @extends 后页面啥也不显示?
常见错误是只写了继承,没定义可填充内容区域。父模板里没有 @yield,子模板的 @section 就无处落脚——Laravel 不报错,但渲染结果为空。
- 父模板(如
resources/views/layouts/app.blade.php)必须显式声明占位:@yield('content')、@yield('title', '默认标题') - 子模板里对应区块必须用同名
@section('content')包裹,且结尾加@endsection(不能用@stop,新版 Blade 已弃用) - 如果用了
@section('content') @parent,表示追加而非覆盖,但父模板该位置原本就得有内容,否则@parent无效
@extends 路径怎么写才不会 404?
路径不是文件系统路径,而是 Blade 视图别名路径,由 resources/views/ 开始,省略 .blade.php 后缀,用点号分隔目录。
- 正确:
@extends('layouts.app')→ 对应resources/views/layouts/app.blade.php - 错误:
@extends('resources.views.layouts.app')或@extends('./layouts/app'),Laravel 会找不到 - 若父模板在子目录如
resources/views/admin/layout.blade.php,就写@extends('admin.layout') - 别名路径区分大小写,Linux 环境下
@extends('Layouts.app')和@extends('layouts.app')是两个不同路径
子模板里能嵌套 @extends 吗?
不能。Blade 不支持多级继承(即 A 继承 B,B 再继承 C)。一个模板最多只能有一个 @extends,且必须是第一行非空非注释代码。
- 如果需要“布局套布局”,实际应通过
@include或@component复用结构块,而不是层层继承 - 把公共导航、侧边栏抽成独立组件(如
resources/views/components/nav.blade.php),再用@include('components.nav')插入,更可控 - 试图在子模板里写两个
@extends,Laravel 会抛出InvalidArgumentException: View [xxx] not found或静默失败
最常被忽略的是:父模板中 @yield 的默认值只在子模板完全不定义对应 @section 时生效;一旦写了 @section('xxx') 却忘了 @endsection,整个页面渲染会中断——连错误提示都可能被吞掉,只剩白屏。










