好的,Laravel 9.X 版本引入了一些重要的新特性和改进。以下是一些关键特性的概述:
1. 强制要求 PHP 8.0 或更高版本
Laravel 9 要求使用 PHP 8.0 或更高版本,充分利用了 PHP 8 的新特性(如命名参数、联合类型、属性等)。
2. Symfony Mailer
Laravel 9 将默认的邮件传输层从 Swift Mailer 迁移到了 Symfony Mailer。这提供了更现代的邮件发送功能,并支持更多传输协议。
3. Flysystem 集成升级
文件存储系统升级到了 Flysystem 的第 3 版(league/flysystem:^3.0),提供了更好的性能和更简洁的 API。
4. 路由缓存改进
路由缓存的生成方式进行了优化,现在支持缓存闭包路由(通过转换为控制器操作实现)。这使得大型应用的路由缓存更加高效。
bash
php artisan route:cache
5. Eloquent 访问器/修改器简化
Eloquent 模型的访问器和修改器语法更加简洁。例如:
php
// 旧版本
public function getNameAttribute($value) {
return strtoupper($value);
}
// Laravel 9
protected function name(): Attribute {
return Attribute::make(
get: fn ($value) => strtoupper($value)
);
}
6. Enum 属性转换支持
Laravel 9 新增了对 PHP 原生 Enum 类型的属性转换支持:
php
use App\Enums\UserRole;
class User extends Model {
protected $casts = [
'role' => UserRole::class,
];
}
7. 匿名存根迁移
新增了 make:migration 命令的 --stub 选项,允许使用自定义存根模板生成迁移文件,提高了灵活性。
8. 测试工具增强
- HTTP 客户端重试机制 :新增
retry()方法支持请求失败时自动重试。 - Parallel Testing :通过
php artisan test --parallel支持并行测试,显著提升测试速度。
9. Ignition 错误页升级
默认的错误调试页面工具 Ignition 升级到了最新版本,提供了更清晰的错误信息和解决方案建议。
10. Blade 组件改进
- 可选属性 :通过
$attributes->has()判断组件是否传递了可选属性。 - 属性值提取 :
$attributes->get('value', 'default')支持默认值。
11. when()/unless() 方法链式调用
查询构造器和 Eloquent 构建器的 when() 和 unless() 方法现在支持链式调用,使条件查询更流畅:
php
User::when($request->has('search'), function ($query) {
$query->where('name', 'like', "%{$request->search}%");
})->unless($request->has('admin'), function ($query) {
$query->where('role', 'user');
});
12. has() 方法的嵌套支持
Eloquent 的 has() 方法现在支持嵌套关系查询:
php
// 查询有活跃订单的用户
User::has('orders.active')->get();
13. 新的 str() 和 to_route() 辅助函数
str():提供流畅的字符串操作(基于Illuminate\Support\Stringable)。to_route():生成路由 URL 并支持重定向。
14. LTS 支持
Laravel 9 是长期支持版本,提供 2 年的错误修复和** 3 年的安全更新**。
这些改进显著提升了开发体验、性能和安全特性。建议结合官方升级指南进行版本迁移。