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


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

相关推荐
阿标在干嘛18 小时前
Nginx一个配置错误,流量损失30%!这是我们的完整排查记录
运维·nginx
IT菜鸟程2 天前
Ubuntu 下 apt 版 Nginx 升级为源码编译版本完整操作指南(1.24.0 → 1.30.4 实战)
linux·nginx·ubuntu
sbjdhjd2 天前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache
NGINX开源社区2 天前
NGINX Gateway Fabric 2.6:F5 WAF for NGINX 集成 Gateway API
nginx·gateway·fabric
小白羊丨2 天前
HTTP/2 如何缓解 HTTP/1.1 阻塞;长连接对 Nginx 有什么影响?
网络协议·nginx·http
xixiaoyunya3 天前
Docker 容器化部署实战:从零搭建一套完整的 Nginx + Node.js + MySQL + Redis 项目环境
nginx·docker·node.js
SendTomo3 天前
【技术交流】从0到1构建一个汉字学习平台:汉字吧(hanzi8.com)的技术架构猜想
redis·mysql·nginx·php·个人开发
滨哥GPT4 天前
Codex新增文件上传后为什么小文件正常,大文件总失败?Multipart、Body Limit与Nginx限制排查
nginx·ai编程·文件上传·codex·multipart
come112344 天前
Nginx `location` 配置说明(后端开发版)
运维·nginx
PHP实战开发录4 天前
PHP文件上传成功为什么页面却找不到
开发语言·nginx·php·开发