命名插槽必须用冒号语法(如 ),laravel 9/10/11 已废弃 name 属性;$slot 恒为字符串,可直接 @if($slot) 判断,而命名插槽变量(如 $header)默认为 null,须用 ??、@isset 或 filled() 防错;$slot 为空字符串时 @isset 仍为真,应改用 @empty($slot);插槽名自动转驼峰(如 card-footer → $cardfooter),拼错则静默失效。

命名插槽必须用冒号语法 <footer></footer>,不是 <x-slot name="footer"></x-slot>
Laravel 10+ 默认只认冒号语法(<footer></footer>),<x-slot name="footer"></x-slot> 在多数版本里根本不会被识别——内容直接丢弃,不报错也不渲染。
常见错误是复制 Vue 或旧文档写法,以为 name 属性通用。实际只有极少数早期 Laravel 版本(如 8.x)部分兼容 name 属性,但 9/10/11 全部废弃。
正确写法只有一种:<header></header>、<actions></actions>,中间不能有空格,结尾必须闭合( 或自闭合 )。
$header 和 $slot 的空值判断逻辑完全不同
$slot 永远是字符串(哪怕为空),所以 @empty($slot) 或 @if($slot) 都能安全用;但命名插槽变量(如 $header)默认是 null,直接 {{ $header }} 会触发 Undefined variable 错误。
必须用以下任一方式兜底:
• {{ $header ?? '默认标题' }}
• @isset($header){{ $header }}@endisset
• @if(filled($header)){{ $header }}@endif
漏掉这一步,组件在没传命名插槽时直接炸锅,且错误堆栈不提示是插槽问题,容易卡很久。
混用默认插槽和命名插槽时,$slot 可能为空字符串而非 null
比如组件里写了 {{ $header }}{{ $slot }}{{ $footer }},但调用时只传了 <header>标题</header>,没传主体内容——这时 $slot 是空字符串 '',不是 null,所以 @isset($slot) 会返回 true,但渲染出来就是空白块,布局塌陷。
更稳妥的判断是:
• 用 @empty($slot)(它同时判 null 和空字符串)
• 或显式写 @if($slot !== '')
别依赖 @isset 判断默认插槽是否存在,这是新手最常踩的视觉陷阱。
插槽变量名自动转驼峰,card-footer 对应 $cardFooter
写 <card-footer>内容</card-footer>,组件内必须用 {{ $cardFooter }},不是 {{ $card_footer }} 也不是 {{ $cardFooter }} 拼错成 $cardfooter。
Laravel 内部用 Str::camel() 处理插槽名,规则是:连字符分隔 → 首字母小写 → 后续单词首字母大写。
常见翻车点:
• <modal-body></modal-body> → 组件里写 {{ $modalBody }}(不是 $modalbody 或 $modal_body)
• <user-avatar></user-avatar> → 必须用 {{ $userAvatar }}
拼错就静默失效,控制台无提示,只能靠排查变量名是否匹配。











