好的,我们来详细了解一下 Laravel 9.x 版本引入的主要新特性和改进:

1. 最低 PHP 8.0 版本要求

Laravel 9.x 要求 PHP 8.0 或更高版本。这利用了 PHP 8 的新特性,如命名参数、联合类型、属性注解等,为框架本身和开发者代码提供了更强的类型安全和表达能力。

2. 改进的 Eloquent 访问器/修改器

访问器和修改器的定义方式变得更加简洁。现在,可以在模型中使用 $appends 属性配合新的方法命名约定来自动关联访问器到属性。

// Laravel 9.x
use Illuminate\Database\Eloquent\Casts\Attribute;
protected function name(): Attribute
{
    return new Attribute(
        get: fn ($value) => ucfirst($value),
        set: fn ($value) => strtolower($value),
    );
}
// 在 $appends 中列出 'name' 即可

3. 匿名 Stub 迁移

默认情况下,Laravel 框架生成的迁移文件现在使用匿名类,这解决了在大型项目中多次运行 make:migration 命令时可能出现的类名冲突问题。

// Laravel 9.x 生成的迁移文件示例
return new class extends Migration
{
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }
};

4. 新的查询构造器接口类型提示

为了提升开发者体验和 IDE 的辅助功能,Laravel 9 为查询构造器引入了更精确的类型提示。例如:

// Laravel 9.x 增强了类型提示
$user = User::where('name', 'John')->first();
// $user 现在会被 IDE 更好地识别为 User 模型实例或 null

5. 简化路由控制器绑定

在路由定义中绑定控制器时,不再需要将控制器类名包裹在数组中,可以直接使用字符串语法。

// Laravel 9.x 更简洁
Route::get('/users', UserController::class);
// 替代之前的
Route::get('/users', [UserController::class, 'index']);

6. 优化的 Flysystem 集成 (Flysystem v3)

Laravel 9 升级到了 Flysystem 的第 3 个主要版本。这带来了更好的性能、新的适配器(如 SFTP)、更一致的 API 以及改进的错误处理机制。虽然大多数文件系统操作保持不变,但底层实现更现代高效。

7. 测试套件的强化

  • 渲染测试辅助方法:新增了 TestView 类和相关方法,使得测试 Blade 模板渲染输出更加方便。
  • JSON 断言增强assertJson 方法现在接受闭包,允许更灵活地验证 JSON 响应结构。
  • 新的 assertJsonPath 方法:用于精确验证 JSON 响应中特定路径的值。
  • 异常处理改进:在测试中处理异常的方式更加一致。
// 新的 JSON 断言示例 (Laravel 9.x)
$response->assertJson(fn (AssertableJson $json) => $json
    ->has('data')
    ->has('data.0', fn ($json) => $json
        ->where('id', 1)
        ->etc()
    )
);

8. Eloquent 时间转换器

除了字符串和布尔值等基本类型转换外,Laravel 9 引入了专门用于日期时间属性的转换器类型 AsDateTimeAsEncryptedDateTime(后者用于加密存储日期)。这提供了对日期格式处理的更精细控制。

// Laravel 9.x
protected $casts = [
    'created_at' => 'datetime:Y-m-d',
    'birthday' => AsDateTime::class . ':Y-m-d', // 使用转换器类
];

9. 默认前端脚手架变更

Laravel 9 将默认的前端脚手架从 Laravel Mix (Webpack) 切换到了 Vite,一个更快的现代构建工具。同时,默认的 welcome.blade.php 视图也被更新,并且官方开始推荐 Inertia.js(结合 Vue 或 React)作为构建单页面应用(SPA)的首选方案。不过,传统的 Blade 开发方式依然完全支持。

10. Symfony Mailer 替代 Swift Mailer

Laravel 9 弃用了 Swift Mailer,转而使用 Symfony Mailer 作为邮件发送的底层驱动。Symfony Mailer 是一个更现代、维护更积极的库。虽然 Laravel 的邮件 API 保持高度兼容,但在底层配置和传输协议实现上有所不同。

11. 新的 ignition 错误页面

Laravel 9 继续使用由 Spatie 开发的 Ignition 作为默认的错误页面,并更新到了其最新版本,提供了更美观、信息更丰富的调试界面。

12. 改进的 artisan serve 命令

artisan serve 命令现在支持使用 --host--port 选项来指定服务器监听的地址和端口,提供了更大的灵活性。

总结

Laravel 9.x 是一个重要的长期支持(LTS)版本,它建立在 PHP 8 的基础之上,带来了许多旨在提升开发效率、代码健壮性、类型安全性和性能的改进。从更简洁的模型访问器到现代化的前端工具链(Vite),从强化的测试功能到 Flysystem 的升级,Laravel 9 为开发者提供了更强大、更愉悦的开发体验。升级时,开发者需要特别注意 PHP 版本要求、邮件驱动变更以及部分 API 的细微调整。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐