不能修改 Blade 模板后缀,因为 Laravel 核心硬编码依赖 .blade.php 后缀,所有路径匹配、缓存键生成和存在性判断均基于此;addExtension() 在 Laravel 10+ 中对 Blade 失效,仅适用于非 Blade 引擎。

在无服务器(Serverless)环境中运行 Laravel 时,修改 Blade 视图模板后缀会导致视图加载彻底失败——因为 Laravel 的核心视图解析器硬编码依赖 .blade.php 后缀,且无任何配置入口可覆盖该规则;哪怕你重写 ViewFinder 或注册自定义引擎,Lambda 执行环境也无法绕过底层编译路径校验。
为什么不能改 Blade 模板后缀
Blade 编译器在 Illuminate\View\Compilers\BladeCompiler 中直接将 .blade.php 写死为唯一合法后缀,所有文件路径匹配、缓存键生成、模板存在性判断均基于此字符串。尝试用 view()->addExtension('php', 'php') 或替换 ViewFactory 实例,都会在 findInPaths() 阶段因 str_ends_with($path, '.blade.php') 判断失败而跳过扫描。
这一步操作起来很简单,直接把文件拖进去就行。
【Laravel 10+ 已移除 view()->addExtension() 对 Blade 引擎的接管能力】,该方法仅对非 Blade 引擎(如 Twig)生效;强行调用只会让 PHP 渲染器接管 .php 文件,但 Blade 指令(@if、@foreach)将被原样输出为 HTML 注释或空白。
Serverless 环境下唯一可行的替代方案
放弃修改后缀,转而通过构建时预编译 + 路径映射实现“逻辑后缀变更”:
第一步:在本地开发时,仍使用标准 resources/views/*.blade.php 文件;
第二步:部署前执行预编译脚本,将所有 .blade.php 文件复制为 .html(或其他目标后缀),同时自动替换其中的 Blade 指令为原生 PHP 代码(例如 @if($user) → );
第三步:在 Serverless 函数入口(如 bootstrap/app.php)中,手动绑定自定义视图路径并注册 PHP 引擎:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
view()->addLocation(base_path('compiled-views'));
view()->addExtension('html', 'php');
注意:预编译必须保留原始变量作用域和继承结构,否则 @extends 和 @section 将无法解析。
验证是否生效的关键检查点
方法一:访问 https://your-app.com/_debug/view-paths(需启用调试路由),确认 compiled-views 已列在 paths 数组首位;
方法二:在控制器中强制抛出异常:return view('welcome.html')->render();,若返回完整 HTML 且含 PHP 输出(如 执行结果),说明 PHP 引擎已接管;
方法三:检查 Lambda 日志中是否有 View [welcome.html] not found 错误——出现即代表路径未注册或文件未上传至部署包。










