必须修改config/view.php的'extensions'数组并清空视图缓存,再通过自定义BladeHtmlCompiler类绑定blade.html引擎,才能使.html文件支持Blade语法且不破坏原有.blade.php功能。

当你在Laravel项目中需要将 Blade 模板文件从 .blade.php 改为其他后缀(例如 .html、.php 或自定义后缀如 .tpl),又不想破坏 Blade 编译器识别、路由渲染、组件解析等核心机制时,必须绕过 Laravel 默认的视图查找逻辑并接管后缀解析流程。
确认当前视图加载器行为
运行 php artisan view:clear 清空缓存,然后在 config/view.php 中检查 'extensions' 配置项——它默认只包含 ['blade.php']。Laravel 视图引擎仅会扫描并编译该数组中声明的后缀文件,其余后缀会被完全忽略,即使文件存在也返回 404 或空响应。
这一步不可跳过。如果未清缓存就直接改配置,旧编译结果仍驻留在 storage/framework/views/ 下,导致你看到的仍是旧模板内容,误判修改失败。
扩展视图后缀支持列表
打开 config/view.php,定位到 'extensions' 键值:
将原数组 ['blade.php'] 修改为:
['blade.php', 'html', 'tpl']
注意:顺序无关,但必须保留 blade.php 在内——否则原有 .blade.php 文件将无法被识别。Laravel 视图查找器会按此顺序尝试匹配,找到第一个存在的文件即停止。
注册自定义视图加载器(关键步骤)
若需支持非 Blade 语法的后缀(如纯 HTML 不含 @ 指令),或希望对 .html 文件仍启用 Blade 编译,则必须重写 View Finder 行为。
在 app/Providers/AppServiceProvider.php 的 boot() 方法中插入:
use Illuminate\View\FileViewFinder;
use Illuminate\Support\Facades\View;
View::swap(new class extends \Illuminate\View\Engines\CompilerEngine { public function get($path, $data = []) { return file_get_contents($path); } });
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
这行代码会覆盖默认引擎,但【会导致所有 Blade 指令(@if、@foreach 等)失效】。仅适用于纯静态 HTML 渲染场景。
安全启用 Blade 编译能力于新后缀
第一步:创建自定义 Blade 编译器类 app/View/BladeHtmlCompiler.php:
namespace App\View;
use Illuminate\View\Compilers\BladeCompiler;
class BladeHtmlCompiler extends BladeCompiler { public function __construct($cachePath) { parent::__construct($cachePath); $this->setExtension('.html'); } }
第二步:在 AppServiceProvider::boot() 中绑定:
use Illuminate\View\Engines\CompilerEngine;
use Illuminate\View\Engines\EngineResolver;
$resolver = app('view.engine.resolver');
$resolver->register('blade.html', function () { return new CompilerEngine(app(BladeHtmlCompiler::class)); });
第三步:确保 config/view.php 中 'extensions' 已包含 'html',且 'engines' 数组中加入 'blade.html' → 'blade.html'。
完成上述三步后,.html 文件将被 Blade 编译器处理,支持 @section、@include、@props 等全部语法,同时不干扰原有 .blade.php 文件。

















