好的,Laravel 8.x 版本引入了多项重要改进和新特性,旨在提升开发效率和功能。以下是其主要特性:
-
Laravel Jetstream
- 这是一个全新的应用脚手架,提供了登录、注册、邮箱验证、双因素认证、会话管理、API 支持(通过 Sanctum)等功能。
- 基于 Tailwind CSS 构建,并提供了 Livewire 和 Inertia.js 两种前端栈选择,取代了旧版的
laravel/ui认证脚手架。 - 核心认证功能由 Laravel Fortify 提供支持(一个无头认证后端库)。
-
模型工厂类重构
-
模型工厂的定义方式完全重构。现在工厂是标准的 PHP 类,继承自
Illuminate\Database\Eloquent\Factories\Factory。 -
工厂类使用新的
Factory::new()方法创建实例,状态定义也采用方法链的方式,代码更清晰、更面向对象。 -
示例:
php// 定义 class UserFactory extends Factory { public function definition(): array { return [ 'name' => $this->faker->name(), 'email' => $this->faker->unique()->safeEmail(), ]; } } // 使用 User::factory()->count(5)->create();
-
-
迁移压缩
- 当项目运行时间较长、迁移文件数量众多时,可以将现有迁移文件"压缩"成一个 SQL 文件。
- 执行
php artisan schema:dump命令会生成一个schema.sql文件(默认在database/schema目录)。 - 之后运行
php artisan migrate时,会优先检查是否存在此 SQL 文件。如果存在且数据库为空,则直接执行 SQL 文件加载表结构,然后再运行剩余的(未被压缩的)迁移文件。这大大减少了大型项目运行迁移的时间。
-
任务批处理
-
Laravel 8 新增了对任务批处理的支持。开发者可以提交一批任务,然后监听整个批处理的生命周期事件(如全部完成、某个任务失败等)。
-
使用
Bus::batch方法创建批处理:phpuse Illuminate\Support\Facades\Bus; Bus::batch([ new ProcessPodcast, new ProcessPodcast, // ... ])->then(function (Batch $batch) { // 所有任务成功完成... })->catch(function (Batch $batch, Throwable $e) { // 批处理中首次检测到任务失败... })->dispatch();
-
-
速率限制改进
-
对路由速率限制器(Rate Limiting)进行了重构和增强。
-
提供了更灵活的方式来定义自定义的速率限制逻辑,支持多种策略(如按用户、IP、自定义键)。
-
示例:
phpRateLimiter::for('global', function (Request $request) { return Limit::perMinute(1000); }); RateLimiter::for('uploads', function (Request $request) { return $request->user()->vipCustomer ? Limit::none() : Limit::perMinute(10); });
-
-
路由缓存改进
- 对路由缓存机制 (
php artisan route:cache) 进行了优化,提高了缓存生成和加载的速度。
- 对路由缓存机制 (
-
Eloquent 改进
- 模型类后缀 :默认情况下,Laravel 8 生成的模型类不再有
.php后缀(如User而不是User.php)。这是 PSR-4 自动加载标准的体现。 factory方法 :Eloquent 模型现在有一个静态的factory方法,用于配合新的模型工厂(见第 2 点),简化了模型实例的创建:User::factory()->create()。- 懒集合 :Eloquent 的
cursor方法现在返回一个LazyCollection实例,支持 Laravel 集合的大多数方法,在处理大量数据时更节省内存。
- 模型类后缀 :默认情况下,Laravel 8 生成的模型类不再有
-
事件监听器优化
- 事件监听器现在支持基于接口或类型的依赖注入。Laravel 会自动解析监听器所需的依赖。
-
时间测试助手
- 新增了
Illuminate\Support\Testing\Fakes\EventFake::assertDispatched等方法,用于更方便地测试事件是否被触发。
- 新增了
-
Laravel Sail
- 虽然 Sail 在 Laravel 8 中引入,但它是一个独立的 Docker 开发环境,提供了预配置的容器(包含 PHP, MySQL, Redis 等),极大简化了本地开发环境的设置。使用
sail命令代替artisan命令(如sail up,sail artisan migrate)。
- 虽然 Sail 在 Laravel 8 中引入,但它是一个独立的 Docker 开发环境,提供了预配置的容器(包含 PHP, MySQL, Redis 等),极大简化了本地开发环境的设置。使用
总结: Laravel 8.x 专注于提升开发体验和现代化工具链,引入了 Jetstream 作为新的应用起点,重构了模型工厂和迁移处理以提高效率,并增强了任务调度、速率限制、事件系统、Eloquent 和测试能力。这些特性共同为开发者构建健壮、高效的应用程序提供了更好的支持。