You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.3 升级至 Laravel 9 正确操作步骤咨询

Laravel 5.3 升级到 Laravel 9 完整实操指南

核心前提

Laravel跨大版本升级必须逐步进行(5.3→5.4→5.5→…→8→9),不能跳版本。你的MacOS本地PHP8无法兼容Laravel5.3,所以第一步要先搭建临时兼容环境,再逐个版本升级。


第一步:搭建临时运行环境(适配Laravel5.3)

因为Laravel5.3依赖PHP5.6~7.0,本地PHP8无法直接运行,推荐两种方案:

  • 方案1:Docker(推荐)
    拉取PHP5.6-fpm镜像,配合Nginx或使用Laravel Sail自定义配置,快速搭建隔离环境,不用修改本地PHP版本。启动容器后进入项目目录,即可执行composer和artisan命令。
  • 方案2:phpbrew安装PHP5.6
    安装phpbrew后执行:
    phpbrew install 5.6.40 +default
    phpbrew switch php-5.6.40
    
    临时切换到PHP5.6版本来处理5.3→5.4的升级。

第二步:逐步升级每个Laravel版本

每个版本升级前必须备份代码和数据库,升级后要验证项目能正常运行(页面、接口、artisan命令无报错),再进行下一个版本。

1. Laravel 5.3 → 5.4

依赖更新(修改composer.json)

{
  "require": {
    "php": ">=5.6.4",
    "laravel/framework": "5.4.*",
    "appzcoder/crud-generator": "^2.1",
    "laravelcollective/html": "5.4.*",
    "doctrine/dbal": "^2.5",
    "maatwebsite/excel": "~2.1.0",
    "predis/predis": "~1.0",
    "guzzlehttp/guzzle": "~6.0",
    "laravel/scout" : "^3.0",
    "algolia/algoliasearch-client-php": "^2.2",
    "fx3costa/laravelchartjs": "^2.2",
    "gloudemans/notify": "^1.0",
    "pda/pheanstalk": "~3.1"
  },
  "require-dev": {
    "fzaninotto/faker": "~1.4",
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "~5.7",
    "symfony/css-selector": "3.2.*",
    "symfony/dom-crawler": "3.2.*"
  }
}

执行composer update,解决依赖冲突(若某个包找不到兼容版本,先暂时移除或找替代包)。

代码调整

  • 将app/Http/routes.php的路由迁移到routes/web.php和routes/api.php
  • 替换废弃方法:Input::get() → request()->input() 或 $request->input()
  • 检查config/app.php中的服务提供者和别名,确保Collective HTML等组件配置正确。

2. Laravel 5.4 → 5.5

依赖更新

{
  "require": {
    "php": ">=7.0.0",
    "laravel/framework": "5.5.*",
    "appzcoder/crud-generator": "^3.0",
    "laravelcollective/html": "5.5.*",
    "laravel/scout" : "^4.0"
  },
  "require-dev": {
    "phpunit/phpunit": "~6.0"
  }
}

切换到PHP7.0版本,执行composer update。

代码调整

  • 启用服务自动发现:移除config/app.php中已支持自动发现的包的服务提供者(如LaravelCollective\Html\HtmlServiceProvider)
  • 检查模型、控制器中是否使用了Laravel5.5废弃的API(如DB::raw()的部分用法)。

3. Laravel 5.5 → 5.6

依赖更新

{
  "require": {
    "php": ">=7.1.3",
    "laravel/framework": "5.6.*",
    "laravelcollective/html": "5.6.*",
    "maatwebsite/excel": "~3.0"
  },
  "require-dev": {
    "phpunit/phpunit": "~7.0"
  }
}

切换到PHP7.1版本,执行composer update。

代码调整

  • 适配邮件系统变化:若使用自定义邮件模板,调整为Markdown格式或兼容新的邮件组件
  • 清理旧的路由缓存:执行php artisan route:clear。

4. Laravel 5.6 → 5.7

依赖更新

{
  "require": {
    "laravel/framework": "5.7.*",
    "laravelcollective/html": "5.7.*",
    "laravel/scout" : "^5.0"
  }
}

执行composer update。

代码调整

  • 适配通知系统新增的数据库通知功能:若使用通知,更新通知类的写法
  • 检查前端Mix配置,升级到兼容5.7的版本。

5. Laravel 5.7 → 5.8

依赖更新

{
  "require": {
    "laravel/framework": "5.8.*",
    "laravelcollective/html": "5.8.*",
    "maatwebsite/excel": "~3.1",
    "laravel/scout" : "^6.0"
  },
  "require-dev": {
    "phpunit/phpunit": "~7.5"
  }
}

执行composer update。

代码调整

  • 适配Carbon 2.x:检查项目中日期时间处理的代码,替换Carbon1.x的废弃方法
  • 调整Request::all()的用法:5.8中该方法默认不会包含未验证的字段,需显式传递参数。

6. Laravel 5.8 → 6.x

依赖更新

{
  "require": {
    "php": ">=7.2",
    "laravel/framework": "^6.0",
    "laravelcollective/html": "^6.0",
    "guzzlehttp/guzzle": "^6.3 || ^7.0",
    "laravel/scout" : "^7.0"
  },
  "require-dev": {
    "phpunit/phpunit": "~8.0"
  }
}

切换到PHP7.2版本,执行composer update。

代码调整

  • 移除路由命名空间:6.x默认移除了RouteServiceProvider中的命名空间配置,需更新控制器路由的写法
  • 适配独立组件:Laravel6将邮件、队列等组件拆分到独立包,检查依赖是否完整。

7. Laravel 6.x → 7.x

依赖更新

{
  "require": {
    "php": ">=7.2.5",
    "laravel/framework": "^7.0",
    "laravelcollective/html": "^7.0",
    "laravel/scout" : "^8.0"
  },
  "require-dev": {
    "phpunit/phpunit": "~8.5"
  }
}

执行composer update。

代码调整

  • 使用HTTP客户端:替换Guzzle的直接调用为Laravel7新增的Http facade
  • 升级模型工厂:使用类工厂替代闭包工厂。

8. Laravel 7.x → 8.x

依赖更新

{
  "require": {
    "php": ">=7.3",
    "laravel/framework": "^8.0",
    "laravelcollective/html": "^8.0",
    "laravel/scout" : "^9.0"
  },
  "require-dev": {
    "phpunit/phpunit": "~9.0"
  }
}

切换到PHP7.3+版本,执行composer update。

代码调整

  • 适配路由缓存优化:执行php artisan route:cache验证路由是否正常加载
  • 使用HasFactory trait:模型需引入Illuminate\Database\Eloquent\Factories\HasFactory trait来兼容新的工厂写法。

9. Laravel 8.x → 9.x

依赖更新

{
  "require": {
    "php": ">=8.0.2",
    "laravel/framework": "^9.0",
    "laravelcollective/html": "^9.0",
    "laravel/scout" : "^10.0"
  },
  "require-dev": {
    "phpunit/phpunit": "~9.5"
  }
}

切换回本地PHP8版本,执行composer update。

代码调整

  • 适配PHP8语法:添加属性类型声明、修复联合类型兼容问题
  • 替换全局助手函数:将str_*、array_*等全局函数替换为Str::*、Arr::* facade调用
  • 检查Laravel9废弃的API,替换为新写法。

第三步:升级后优化

  • 合并配置文件:每个版本升级都会新增或修改配置项,对比旧配置文件合并到新文件中
  • 前端资源升级:将Laravel Mix替换为Vite(Laravel9推荐),更新前端构建流程
  • 数据库优化:修复PHP8下的数据库查询兼容性问题(如严格模式下的字段类型)
  • 运行单元测试:确保所有测试用例通过,验证业务逻辑正常。

内容的提问来源于stack exchange,提问作者WaqasRaza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:35:25