Laravel 9.x新特性全解析
Laravel 9.x作为长期支持版本,引入多项重要改进:要求PHP 8.0+以支持新特性;优化Eloquent访问器/修改器语法;采用匿名类迁移解决命名冲突;增强查询构造器类型提示;简化路由绑定语法;升级至Flysystem v3提升文件系统性能;强化测试套件功能;新增Eloquent时间转换器;默认前端工具切换为Vite;邮件驱动改用SymfonyMailer;改进错误页面和artisan s
好的,我们来详细了解一下 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 引入了专门用于日期时间属性的转换器类型 AsDateTime 和 AsEncryptedDateTime(后者用于加密存储日期)。这提供了对日期格式处理的更精细控制。
// 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 的细微调整。
更多推荐



所有评论(0)