Laravel怎么使用模板继承 _ Laravel Blade模板@extends使用方法【经验】

3次阅读

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

Laravel怎么使用模板继承 _ Laravel Blade模板@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,整个页面渲染会中断——连错误提示都可能被吞掉,只剩白屏。

text=ZqhQzanResources