Laravel9.X新特性全解析

好的,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 年的安全更新**。


这些改进显著提升了开发体验、性能和安全特性。建议结合官方升级指南进行版本迁移。

相关推荐
天衍四九-11 小时前
【无标题】
前端·spring boot·mysql·nginx·docker
吴声子夜歌16 小时前
Nginx应用与运维——Nginx HTTP模块详解(动态赋值功能模块)
运维·nginx·http
姜鱼问生16 小时前
三层防火墙排查:Nginx 配好了浏览器还打不开
nginx·安全
小白的码BUG之路20 小时前
Docker -- 构建nginx镜像,启动vue项目
vue.js·nginx·docker
yume_sibai21 小时前
04-Nginx部署实战完全指南(前端部署 + 后端代理 + 监控告警 + 故障排查)
运维·前端·nginx
程序员清风1 天前
Docker、Nginx 与 Kubernetes 部署 AI 后端服务
nginx·docker·kubernetes
吴声子夜歌2 天前
Nginx应用与运维——Nginx核心配置指令(一)
运维·nginx
谢亮_vipxieliang2 天前
一套 Compose 搭起完整开发环境:MySQL + Redis + Nginx
redis·mysql·nginx·docker
xbzb2 天前
Nginx 反向代理总 404?Location 匹配与 proxy_pass 尾斜杠避坑手册
linux·运维·nginx·虚拟主机
ShayneLee82 天前
Nginx只开一个端口!能做什么?(一)
运维·nginx