Laravel中需同时注册自定义视图扩展器并配置config/view.php的extensions数组,才能使.html等后缀被Blade引擎识别和编译;否则视图将静默404。

当你在Laravel项目中想把 Blade 模板文件的 .blade.php 后缀换成 .html、.tpl 或其他自定义后缀时,必须修改视图解析器的注册逻辑,否则 Laravel 会直接忽略这些文件,连报错都不会有——它安静地回退到 404。
确认当前视图加载机制
运行 php artisan view:clear 清空缓存,再打开 storage/framework/views/ 目录,观察生成的编译后文件名(如 xxx.blade.php.php)。这说明 Laravel 默认只识别 .blade.php 后缀并将其编译为 PHP 文件。若你已把模板改成 .html,但页面空白或 404,大概率是视图引擎根本没加载它。
注册自定义视图扩展器
在 app/Providers/AppServiceProvider.php 的 boot() 方法中添加:
第一步:获取视图工厂实例 → 调用 extend() 方法绑定新后缀与编译器 → 使用 BladeCompiler 实例处理内容。
方法一(推荐):直接复用 Blade 编译器
$this->app['view.engine.resolver']->register('html', function () {
return new \Illuminate\View\Engines\CompilerEngine($this->app['view.compiler'], $this->app['files']);
});
方法二:指定 Blade 编译器路径(适用于 Laravel 9+)
$this->app['view.engine.resolver']->register('tpl', function () {
$compiler = $this->app['blade.compiler'];
return new \Illuminate\View\Engines\CompilerEngine($compiler, $this->app['files']);
});
【注意:extend() 必须在 boot() 中调用,不能放在 register() 里,否则视图解析器尚未初始化】
告诉 Laravel 哪些后缀归 Blade 管理
在 config/view.php 配置文件中找到 extensions 数组,追加你的后缀:
'extensions' => [
'php' => 'php',
'blade.php' => 'blade',
'html' => 'blade',
'tpl' => 'blade'
],
这一步决定 Laravel 在 findView() 阶段是否把 xxx.html 当作 blade 视图去加载。不加这一行,即使注册了引擎,也会跳过匹配,直接返回 null。
验证模板能否被正确加载
创建 resources/views/test.html,写入 {{ now()->format('Y-m-d') }};
在控制器中 return view('test');
访问对应路由,如果输出当前日期,说明后缀已生效;如果报 View [test] not found,则检查 config/view.php 中 extensions 是否拼写错误,或是否漏掉 php artisan config:clear。


















