Blade模板中“unexpected 'endif'”错误主因是命名插槽未正确闭合或混用两种插槽语法;必须严格配对、统一语法、区分大小写、手动渲染且确保嵌套位置正确。

Blade模板里出现unexpected 'endif',基本是插槽没闭合
这个错误不是你代码里真写了多余的 @endif,而是Laravel的Blade解析器在处理组件时“迷路”了——它以为某个命名插槽还没结束,就一路把后续所有内容(包括 @endif、@endsection 甚至 @endphp)都吞进去当插槽体,直到文件末尾才撞上那个本该合法的 @endif,于是报错:syntax error, unexpected 'endif' (T_ENDIF)。
<x-slot name="footer"></x-slot> 和 <footer></footer> 别混用
Blade支持两种命名插槽写法,但它们不兼容:
-
<x-slot name="header"></x-slot>是显式语法,必须配对闭合,不能自闭合 -
<header></header>是简写语法,也必须严格配对,且名称区分大小写(<cardfooter></cardfooter>→ 变量是$cardFooter,不是$card_footer) - 混用会导致解析器状态错乱,比如写了
<x-slot name="footer"></x-slot>却用关闭,直接报错
组件内部漏写 {{ $footer }} 不会报错,但内容消失
默认插槽 $slot 是自动注入的,但所有命名插槽都得手动渲染。漏掉这一步,插槽内容就静默丢弃:
- 写了
<x-slot name="actions">...</x-slot>,但在组件模板里只写了{{ $header }},没写{{ $actions }}→ 动作区空白 - 建议统一用
@isset($footer) {{ $footer }} @endisset包裹,避免空值触发未定义变量警告 - 变量名由冒号后名称决定:
<x-slot name="card-footer"></x-slot>→ 实际变量是$cardFooter(驼峰),不是$cardFooter或$card_footer
<x-slot></x-slot> 必须严格嵌套在组件标签内
位置错一毫,整个解析就崩:
立即学习“PHP免费学习笔记(深入)”;
- 错误写法:
<x-card> ... </x-card><x-slot name="footer">...</x-slot>→ 插槽在组件外,无效 - 正确写法:
<x-card><x-slot name="footer">...</x-slot></x-card>,且不能跨多个组件边界 - 嵌套层级错乱(比如在
<x-card></x-card>内又开了个<x-layout></x-layout>,却把<x-slot></x-slot>放到外层闭合前)也会触发 same error
@endif。盯住所有 <x-slot></x-slot>、<header></header> 类标签,逐个确认是否成对、是否在正确父标签内、是否用了统一语法——少一个 ,后面十行 Blade 都可能白写。



















