laravel 7 升级到 laravel8

laravel 6,laravel 7,laravel 8 修复BUG时间

版本 发布时间 Bug 修复截止时间 安全修复截止时间
6 (LTS) 2019 年 9 月 3 日 2021 年 9 月 3 日 2022 年 9 月 3 日
7 2020 年 3 月 3 日 2020 年 9 月 3 日 2021 年 3 月 3 日
8 2020 年 9 月 8 日 2021 年 3 月 8 日 2021 年 9 月 8 日

laravel 8 版本

Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制, 队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善

laravel 7 升级到 laravel8

需要 PHP 7.3.0

更新依赖

修改 composer.json

guzzlehttp/guzzle to ^7.0.1
facade/ignition to ^2.3.6
laravel/framework to ^8.0
laravel/ui to ^3.0
nunomaduro/collision to ^5.0
phpunit/phpunit to ^9.0
laravel/framework ^8.12"
composer update

模型工厂

Laravel 的 模型工厂 已经完全重写为基于类的写法,并且和 7.x 中的写法不兼容。然而,为了简化升级过程,我们发布了一个扩展包 laravel/legacy-factories 可以在 Laravel 8 中继续使用你之前的工厂文件。你可以通过 Composer 安装这个依赖

composer require laravel/legacy-factories

分页样式

分页器现在使用 Tailwind CSS framework 作为它的默认风格。 若要继续保持使用 Bootstrap,你需要在你的应用的 AppServiceProvider 的 boot 方法中添加如下方法调用

use Illuminate\Pagination\Paginator;
Paginator::useBootstrap();

队列

retryAfter 方法

为了和 Laravel 其他特性保持一致,队列任务,邮件系统,通知,监听器中的 retryAfter 方法和 retryAfter 属性被重命名为 backoff。你应该修改你应用中相关的方法和属性名称

timeoutAt 属性

队列任务,通知,监听器中的 timeoutAt 属性被重命名为 retryUntil。你应该修改你应用中相关的属性名称。

失败任务表批处理支持

如果你计划使用 Laravel 8 的 任务批处理 特性,你需要更新你的 failed_jobs 数据表。首先,应该添加一个新的 uuid 列。

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::table('failed_jobs', function (Blueprint $table) {
    $table->string('uuid')->after('id')->unique();
});

然后,修改 queue.php 配置文件中的 failed.driver 配置项的值为 database-uuids。
黑白课堂

路由命名空间更新

在 Laravel 的早期版本中,RouteServiceProvider 具有 $namespace 属性。该属性的值将自动添加到控制器路由定义的前缀.
在 Laravel 8.x 中,默认情况下此属性为 null。这意味着 Laravel 不会自动命名空间前缀 。因此,在新的 Laravel 8.x 应用程序中,应使用标准的 PHP 语法定义控制器路由:

use App\Http\Controllers\UserController;

Route::get('/users', [UserController::class, 'index']);
<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use \App\Http\Controllers\Api\AuthController;

//Laravel8写法
Route::group(['prefix'=>'xcx','as'=>'xcx'],function ($route){
   $route->any('login',[AuthController::class,'login']);
});

//laravel7版本以下
Route::group(['prefix'=>'xcx','as'=>'xcx','namespange'=>'Api'],function ($route){
    $route->any('login','AuthController@login');
});

如果想要用回之前的写法,则需要更改 app/Providers/RouteServiceProvider.php

// protected $namespace = 'App\\Http\\Controllers';

将注释去掉即可

路由写法

laravel 8 之后,使用路由命名写法

use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

而laravel7

Route::get('/user','UserController@login');

如果想要用回之前的写法,则需要更改 app/Providers/RouteServiceProvider.php

// protected $namespace = 'App\\Http\\Controllers';

将注释去掉即可

评论区 (0)

没有记录
支持 markdown,图片截图粘贴拖拽都可以自动上传。
黑白课堂

黑白课堂 · 技术专家

专业PHP开发

年度VIP 站长创业者玉树凌风每天醒来0收入
查看更多

最新视频课程

钻级赞助商