0

0

如何将一个旧的Laravel项目平滑升级到最新版本? (升级指南与步骤)

穿越時空

穿越時空

发布时间:2026-01-14 11:22:03

|

911人浏览过

|

来源于php中文网

原创

必须逐个主版本升级Laravel,跳过中间版本会导致依赖冲突、API失效等异常;需匹配PHP版本、备份配置、通过测试、锁定第三方包,并使用官方升级助手及手动修正变更。

如何将一个旧的laravel项目平滑升级到最新版本? (升级指南与步骤)

不能直接跨大版本升级,必须逐个主版本迭代,否则 composer update 会失败或引发大量运行时异常。

确认当前版本与目标版本的兼容路径

Laravel 的主版本升级(如 8 → 9 → 10 → 11)不是线性平滑的,每个版本都有明确的 PHP 版本、依赖包和废弃 API 要求。跳过中间版本大概率导致 illuminate/support 冲突、Facade 类找不到、或 Route::middleware() 行为变更等隐性问题。

  • 查当前版本:
    php artisan --version
    或看 composer.json"laravel/framework" 的约束值(如 "^8.75"
  • 查升级路径:官方只维护相邻主版本的升级指南,例如 Laravel 10 升级文档只覆盖从 9 升到 10,不支持从 8 直升 10
  • PHP 版本必须匹配:Laravel 11 要求 PHP ≥ 8.2,若当前是 PHP 8.0,需先升级 PHP 再动框架

每次升级前必须做的三件事

这不是可选步骤,漏掉任意一项都可能让升级后应用在 CI 或生产环境凌晨三点崩溃。

  • 备份整个 composer.lock 文件和 config/ 目录 —— 尤其是 config/app.php 和自定义配置项,升级脚本常静默覆盖它们
  • 确保全部测试通过:
    vendor/bin/phpunit
    ,重点盯住 Feature 测试里涉及表单验证、中间件顺序、队列 job 序列化的用例
  • 禁用所有第三方包的自动更新:在 composer.json 中临时锁定关键包,例如 "spatie/laravel-permission": "^5.10"(对应 Laravel 9),避免 composer update 同时拉入不兼容新版 Laravel 的包

执行升级的核心命令与关键检查点

以 Laravel 9 → 10 为例(其他主版本同理),核心动作是替换骨架文件 + 修正迁移层变更,而非仅改 composer 版本号。

YouMind
YouMind

AI内容创作和信息整理平台

下载
  • 修改 composer.json"laravel/framework""^10.0",同时更新 "php" 约束(如 "^8.1"
  • 运行:
    composer update "laravel/framework" "laravel/tinker" --with-all-dependencies
    ,加 --with-all-dependencies 是防止 illuminate/* 子包版本撕裂
  • 运行官方升级助手:
    php artisan laravel:upgrade
    (需先 composer require laravel/upgrade --dev),它会自动替换 app/Providers/RouteServiceProvider.php、修复 bootstrap/app.php 结构等
  • 手动检查:是否还存在 use Illuminate\Support\Facades\Hash; 这类被移到 Illuminate\Hashing\HashManager 的引用;config/cache.php 中的 stores.file 是否被移除(Laravel 10+ 不再支持 file 缓存驱动)

升级后高频报错与速查方案

这些错误不会出现在升级文档首页,但几乎每个项目都会撞上:

  • Target class [App\Http\Controllers\Controller] does not exist:Laravel 9+ 移除了默认的基类控制器,需把所有控制器继承改为 extends Illuminate\Routing\Controller 或删掉 extends Controller
  • Call to undefined method Illuminate\Database\Query\Builder::whenLoaded():这是 Eloquent 的 lazy eager loading 方法,Laravel 10 改名为 whenHas(),全局搜索替换即可
  • Class 'App\Providers\AppServiceProvider' not found:升级助手有时漏改 bootstrap/app.php 中的命名空间引用,确认是否还是 App\Providers\AppServiceProvider::class(Laravel 10+ 默认去掉 App\ 前缀)
  • 队列 job 执行失败且无日志:检查 app/Jobs/YourJob.php 是否仍用 implements ShouldQueue 但没加 use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; trait —— Laravel 9+ 强制要求显式 use

最麻烦的从来不是命令行那几行输出,而是 config 文件里某个被注释掉的旧配置,在升级后意外生效,或者某张 migration 表用了 $table->jsonb()(PostgreSQL only),而新版本默认 MySQL 驱动根本不认识这个方法 —— 动手前,先通读目标版本的「Breaking Changes」列表,比跑十遍 composer update 更省时间。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2490

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1593

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1485

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1414

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1305

2023.11.13

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

0

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.7万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 791人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号