Laravel 8 正式发布,一起来看看有哪些新特性吧


Laravel 8 已于昨天正式发布(非 LTS 版本),本次主版本发布引入了 Laravel Jetstream、模型类目录、模型工厂类、迁移文件压缩、频率限制优化、时间测试辅助函数、动态 Blade 组件等新特性。

注:有同学反馈为什么 Laravel 版本发布这么频繁,那是因为从 Laravel 6 开始引入了新的版本发布周期,具体可参考学院君之前发布的这篇教程:Laravel 6 之后新版本的发布周期介绍

下面我们一起来速览下这些新特性:

Laravel Jetstream

Laravel Jetstream 是在之前版本上进行优化和全新设计的 Laravel UI 脚手架代码:

其中包含了登录、注册、邮箱验证、双因子认证(2FA)、会话管理、基于 Laravel Sanctum 的 API 支持、以及可选的团队管理等功能。

Jetstream 使用的 CSS 框架是 Tailwind CSS,并且提供了 LivewireInertia 脚手架选项,你可以任选其一进行前端组件开发。

模型类目录

Laravel 8 终于在 app 目录下引入了 Models 子目录来存放模型类文件,所有通过 make:model 命令生成的模型类以后默认都会存放在这个目录下;不过,如果你选择删除这个目录,新生成的模型类将仍然存放到 app 目录下。

模型工厂类

从 Laravel 8 开始,Eloquent 模型工厂将基于类进行管理,从而支持不同工厂之间的关联关系,新的模型工厂调用语法如下所示,相比之前可读性更好:

use App\Models\User;

User::factory()->count(50)->create();

// 使用工厂类中定义的 "suspended" 关联方法
User::factory()->count(5)->suspended()->create();

迁移文件压缩

随着应用功能越来越复杂,需要创建越来越多的数据库迁移文件,可能多至上百个,管理起来有点麻烦,从 Laravel 8 开始,你可以将它们压缩到单个 SQL 文件中,该 SQL 文件会在运行迁移命令之前执行,然后再执行其他未压缩的迁移文件。该功能可以有效降低迁移文件的数量,并且在测试时提升性能。

优化访问频率

Laravel 8 优化了之前已经存在的访问频率限制功能 —— 支持向后兼容 throttle 中间件,并且提供了更高的灵活性。Laravel 8 引入了一个可以通过门面定义的访问频率限制器:

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

RateLimiter::for('global', function (Request $request) {
    return Limit::perMinute(1000);
});

正如你所看到的,for 方法中持有 HTTP 请求示例,因此你可以完全动态控制请求频率。

时间测试辅助函数

在 Laravel 中,一直都可以通过 PHP Carbon 库完全控制时间的修改,Laravel 8 则在此基础上往前更进一步 —— 在测试时使用一个更加方便的辅助函数来操作时间:

// 穿越到未来...
$this->travel(5)->milliseconds();
$this->travel(5)->seconds();
$this->travel(5)->minutes();
$this->travel(5)->hours();
$this->travel(5)->days();
$this->travel(5)->weeks();
$this->travel(5)->years();

// 穿越到过去...
$this->travel(-5)->hours();

// 穿越到指定时间...
$this->travelTo(now()->subHours(6));

// 回到现在...
$this->travelBack();

使用这些方法时,时间会在每个测试之间重置。

动态 Blade 组件

有时候你可能需要在运行时动态渲染 Blade 组件,Laravel 8 提供了一个 <x-dynamic-component/> 组件来实现这个功能:

<x-dynamic-component :component="$componentName" class="mt-4" />

更多新特性

以上只是从 Laravel 8 中提取的一些比较重要的新特性进行介绍,完整的新特性列表可以参考官方的版本发布日志升级指南

学院君随后会开始更新 Laravel 8 中文文档,你还可以通过扫码关注学院君视频号查看 Laravel 8 新特性系列介绍视频:

学院君视频号


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: 目录索引

>> 下一篇: Laravel 7 正式发布,一起来看看有哪些重要更新吧