@include引入子视图只需路径正确且文件存在即可渲染,路径用点号分隔、不加.blade.php后缀、不支持绝对路径或../回退,如@include('admin.users.table')对应resources/views/admin/users/table.blade.php。

直接用 @include 就能引入子视图,不需要继承、不需要定义 section,只要路径对、文件存在,就能立刻渲染。
子视图路径怎么写才不报错
Blade 的 @include 查找路径时,会自动把 . 替换成 /,并拼上 .blade.php 后缀。它只认 resources/views/ 下的相对路径,不支持绝对路径或 ../ 回退。
-
@include('header')→ 对应resources/views/header.blade.php -
@include('layouts.sidebar')→ 对应resources/views/layouts/sidebar.blade.php -
@include('admin.users.table')→ 对应resources/views/admin/users/table.blade.php - 错误写法:
@include('./header')、@include('resources/views/header')、@include('header.blade.php')—— 全部会报View [xxx] not found
传数据给子视图的三种方式
子视图默认拿不到父视图的变量,必须显式传递。最常用的是数组方式,但要注意键名冲突和空值风险。
- 基础传参:
@include('alert', ['type' => 'success', 'message' => '操作完成']),子视图里直接用{{$type}}、{{$message}} - 复用父视图变量:
@include('card', ['title' => $title ?? '默认标题', 'items' => $items ?? []]),避免未定义变量报错 - 用
with链式调用(不推荐):@include('footer')->with('year', date('Y'))—— 实际无效,@include不支持链式方法,这行代码会被当成字符串输出
@include 和 @extends 的核心区别在哪
这是新手最容易混用的两个指令。@include 是「嵌入」,@extends 是「继承」,语义和行为完全不同。
-
@include:纯内容复用,子视图是独立文件,无逻辑耦合,可多次、任意位置使用,适合 header / alert / form-item 这类组件 -
@extends:结构复用,子视图必须配对@section,父布局必须有@yield插槽,整个页面只能@extends一次,适合 layout / admin shell 这类骨架 - 常见误用:
@extends用来引入一个按钮片段,结果发现@section('button')没被@yield('button')接收,页面空白 —— 这时候该换@include
子视图里能不能用 $loop、$errors 这些变量
可以,但仅限于它们在父视图作用域内已存在且未被覆盖。Blade 的变量作用域是「包含即可见」,不是「继承才可见」。
- 如果父视图用了
@foreach($items as $item),子视图里写{{$loop->index}}是有效的 - 如果控制器返回了
view('page', ['errors' => $errors]),子视图里@if($errors->any())也能正常工作 - 但如果子视图自己定义了同名变量,比如
@include('list', ['errors' => []]),那子视图里的$errors就会被覆盖,不再指向 Laravel 自动注入的验证错误对象
真正容易被忽略的是:子视图文件本身不会被自动编译缓存,但一旦父视图被缓存(php artisan view:cache),所有被 @include 的子视图也会一并编译进缓存文件里 —— 所以改完子视图后,上线前记得清缓存,否则修改不生效。











