编程

laravel 9.x 升级到 laravel 10

516 2023-02-28 05:26:09

Laravel 10 已于 2 月 14 日发布。Laravel 10 要求最低 PHP 版本为 8.1。在 Laravel 发行说明 中阅读有关该发行版的更多信息。

我们的 Basic Laravel Admin Panel 目前是 Laravel 9.x 版本,现在是时候升级到 Laravel 10 了。

Laravel 从 9.x 升级到 10.x
Laravel 升级涉及以下步骤。

更新 PHP 版本
更新 Composer 版本
更新 Composer 依赖项
更新 Composer 最低稳定性
更新 Docker Composer
所有的升级步骤都可以在 Laravel 官方文档 中找到。

更新 PHP 版本
Laravel 10 需要 PHP 8.1.0 或更高版本。如果你使用 8.1 以下的 PHP 版本。请先更新你的 PHP 版本。

现在我们将检查 Admin Panel PHP 版本。PHP 版本将会显示在 Admin Panel 或 Laravel 默认的首页。

 

你也可以使用以下命令在命令行中检查 PHP 版本和 Laravel 版本。

PHP 版本

./vendor/bin/sail php -v
// or
./vendor/bin/sail php --version
//If you not using sail
php -v


Laravel 版本

./vendor/bin/sail artisan -v
//or
./vendor/bin/sail artisan --version
//If you not using sail
php artisan --version


除此之外,你还可以在 ./vendor/laravel/framework/src/Illuminate/Foundation/Application.php 文件中检查 Laravel 版本。

 

本文中 Laravel 管理面板使用的是 Laravel sail(Docker 开发环境)。所以我们需要更新 docker-compose.yml 文件中的 PHP。 我们将在最后更新它。

Composer 版本更新
Laravel 10 需要 Composer 2.2.0 或更高版本。 如果你使用的是较低版本,请卸载并安装新版本。

可以使用以下命令检查你的 composer 版本

composer -v
composer -vvv about

如果你使用的是 sail,试试下面这种方式

./vendor/bin/sail composer -v
./vendor/bin/sail composer -vvv about

现在已经是 2.2.0 以上的 composer 版本。

更新 Composer 依赖项
对于 Laravel 10,我们需要在应用程序的 composer.json 文件中更新以下依赖项

  • laravel/framework to ^10.0
    spatie/laravel-ignition to ^2.0
    php to ^8.1
    管理面板更新了以下依赖项
diff --git a/composer.json b/composer.json
index 381f15d..b0be0bc 100644
--- a/composer.json
+++ b/composer.json
@@ -5,12 +5,12 @@
    "keywords": ["framework", "laravel", "boilerplate", "admin panel"],
    "license": "MIT",
    "require": {
-        "php": "^8.0.2",
+        "php": "^8.1",
        "balajidharma/laravel-admin-core": "^1.0",
        "guzzlehttp/guzzle": "^7.2",
-        "laravel/framework": "^9.19",
-        "laravel/sanctum": "^2.14.1",
-        "laravel/tinker": "^2.7",
+        "laravel/framework": "^10.0",
+        "laravel/sanctum": "^3.2",
+        "laravel/tinker": "^2.8",
        "spatie/laravel-permission": "^5.5"
    },
    "require-dev": {
@@ -19,11 +19,11 @@
        "laravel/breeze": "^1.7",
        "laravel/dusk": "^7.1",
        "laravel/pint": "^1.0",
-        "laravel/sail": "^1.0.1",
+        "laravel/sail": "^1.18",
        "mockery/mockery": "^1.4.4",
-        "nunomaduro/collision": "^6.1",
-        "phpunit/phpunit": "^9.5.10",
-        "spatie/laravel-ignition": "^1.0"
+        "nunomaduro/collision": "^7.0",
+        "phpunit/phpunit": "^10.0",
+        "spatie/laravel-ignition": "^2.0"
    },
    "autoload": {
        "psr-4": {


修改 composer Minimum Stability
还有一个 composer 文件的更改。minimum-stability 选项需要被修改为 stable

"minimum-stability": "stable",


在修改完后运行 composer update

./vendor/bin/sail composer update 


现在打开应用程序主页。

 

如果你需要更新的欢迎页面,请复制 raw.githubusercontent.com/laravel/... 并更新 resources/views/welcome.blade.php 文件

 

更新 Docker Composer
我们将使用 Laravel 上的最新更改更新 docker-compose.yml 文件。

最新的 Laravel sail 使用的是 PHP 8.2 版本。以下是最终版本的 docker-compose.yml 文件。

version: '3'
services:
   laravel.test:
       build:
           context: ./vendor/laravel/sail/runtimes/8.2
           dockerfile: Dockerfile
           args:
               WWWGROUP: '${WWWGROUP}'
       image: sail-8.2/app
       extra_hosts:
           - 'host.docker.internal:host-gateway'
       ports:
           - '${APP_PORT:-80}:80'
           - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
       environment:
           WWWUSER: '${WWWUSER}'
           LARAVEL_SAIL: 1
           XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
           XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
       volumes:
           - '.:/var/www/html'
       networks:
           - sail
       depends_on:
           - mysql
           - redis
           - meilisearch
           - mailpit
           - selenium
   mysql:
       image: 'mysql/mysql-server:8.0'
       ports:
           - '${FORWARD_DB_PORT:-3306}:3306'
       environment:
           MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
           MYSQL_ROOT_HOST: "%"
           MYSQL_DATABASE: '${DB_DATABASE}'
           MYSQL_USER: '${DB_USERNAME}'
           MYSQL_PASSWORD: '${DB_PASSWORD}'
           MYSQL_ALLOW_EMPTY_PASSWORD: 1
       volumes:
           - 'sail-mysql:/var/lib/mysql'
       networks:
           - sail
       healthcheck:
           test:
               - CMD
               - mysqladmin
               - ping
               - '-p${DB_PASSWORD}'
           retries: 3
           timeout: 5s
   redis:
       image: 'redis:alpine'
       ports:
           - '${FORWARD_REDIS_PORT:-6379}:6379'
       volumes:
           - 'sail-redis:/data'
       networks:
           - sail
       healthcheck:
           test:
               - CMD
               - redis-cli
               - ping
           retries: 3
           timeout: 5s
   meilisearch:
       image: 'getmeili/meilisearch:latest'
       ports:
           - '${FORWARD_MEILISEARCH_PORT:-7700}:7700'
       volumes:
           - 'sail-meilisearch:/meili_data'
       networks:
           - sail
       healthcheck:
           test:
               - CMD
               - wget
               - '--no-verbose'
               - '--spider'
               - 'http://localhost:7700/health'
           retries: 3
           timeout: 5s
   mailpit:
       image: 'axllent/mailpit:latest'
       ports:
           - '${FORWARD_MAILPIT_PORT:-1025}:1025'
           - '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'
       networks:
           - sail
   selenium:
       image: 'selenium/standalone-chrome'
       extra_hosts:
           - 'host.docker.internal:host-gateway'
       volumes:
           - '/dev/shm:/dev/shm'
       networks:
           - sail
   phpmyadmin:
       image: phpmyadmin/phpmyadmin
       links:
           - mysql:mysql
       ports:
           - 8080:80
       environment:
           MYSQL_USERNAME: "${DB_USERNAME}"
           MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
           PMA_HOST: mysql
       networks:
           - sail
networks:
   sail:
       driver: bridge
volumes:
   sail-mysql:
       driver: local
   sail-redis:
       driver: local
   sail-meilisearch:
       driver: local


我们已成功将管理面板升级到 Laravel 10.x