Laravel 中 Blade 模板不支持直接修改后缀为 .vue 或 .html,因编译器硬编码识别 .blade.php;需保持 .blade.php 后缀,通过 @include 或类组件(php artisan make:component)实现复用,自动组件发现需确保命名空间和路径正确并清除缓存。

你需要在 Laravel 项目中让 Blade 模板支持非 .blade.php 后缀(如 .vue 或 .html),同时又要保证视图组件(如
确认 Blade 模板后缀不可直接修改
Blade 编译器硬编码识别 .blade.php 后缀,强行改文件后缀会导致 【view() 调用完全失效,报 View [xxx] not found 错误】。Laravel 不会扫描 .html 或 .vue 文件作为 Blade 视图,即使它们内容是合法 Blade 语法。
试图在 config/view.php 中修改 'extensions' 选项为 ['html', 'blade.php'] 仅影响视图查找逻辑,但不会触发 Blade 编译器——.html 文件会被当作纯 PHP 执行,其中的 @foreach、{{ $var }} 等语法直接报错。
实现组件化开发的两种正交路径
组件化不依赖后缀变更,而取决于如何定义和调用。你必须在原生 .blade.php 体系下完成组件封装。
方法一:使用 @include 实现轻量复用(适合无逻辑静态片段)
第一步:在 resources/views/includes/ 下新建 chart_card.blade.php,写入带 Bootstrap 卡片结构的图表代码;
第二步:在 dashboard.blade.php 中写入 @include('includes.chart_card', ['labels' => $months, 'data' => $revenue]);
注意:@include 传参是数组,变量名需与子视图内使用的变量名完全一致,否则 $labels 会报 undefined variable。
方法二:创建类组件实现逻辑封装(推荐用于含状态、校验或插槽的场景)
① 运行命令生成组件骨架:php artisan make:component StatCard;
② 编辑 app/View/Components/StatCard.php,在构造函数中声明 public 属性:public string $title; public int $value; public string $icon = 'trending-up';;
③ 在 resources/views/components/stat-card.blade.php 中使用 <div class="card"><div class="card-body">
<h3>{{ $title }}</h3>
<p>{{ $value }}</p>
</div></div>;
④ 在任意 blade 文件中调用:<x-stat-card title="订单数" :value="1428" icon="shopping-cart"></x-stat-card>;
这一步必须用冒号前缀 :value 绑定整型,否则字符串 "1428" 会被传入,导致组件内类型断言失败或格式错误。
启用自动组件发现(省去手动注册)
确保你的组件类位于 app/View/Components/ 目录下,且命名空间为 App\View\Components;
Laravel 8+ 默认开启自动发现,无需在 AppServiceProvider 中手动注册;
若组件未被识别,请运行 php artisan optimize:clear 清除视图缓存,否则旧的组件映射仍生效。


















