Laravel 9.x 作为 2022 年发布的重要版本,引入了多项关键特性与优化,以下是核心更新概览:


1. PHP 8.0 最低依赖要求

  • 强制要求 PHP ≥ 8.0,充分利用其新特性(如命名参数、联合类型、构造器属性提升等)。
  • 示例:构造器属性提升简化模型定义
    class User extends Model {
        public function __construct(
            public string $name,
            public int $age
        ) {}
    }
    


2. 路由控制器路由绑定(Route Binding)

  • 简化路由参数到控制器的隐式绑定:
    Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
        return $post;
    });
    

  • 无需显式定义模型绑定逻辑。

3. 匿名迁移类

  • 迁移文件不再需定义类名,避免类名冲突:
    return new class extends Migration {
        public function up() {
            Schema::create('flights', function (Blueprint $table) {
                $table->id();
                $table->timestamps();
            });
        }
    };
    


4. Symfony Mailer 集成

  • 替换弃用的 SwiftMailer,支持更现代的邮件传输协议(如 SMTP、Mailgun、Postmark)。
  • 配置兼容性调整:
    MAIL_MAILER=smtp
    MAIL_HOST=mailpit
    MAIL_PORT=1025
    


5. 异常处理页面优化

  • 默认错误页面使用 Laravel Ignition 替代 Whoops,提供更清晰的堆栈跟踪与问题修复建议。

6. Eloquent 访问器/修改器优化

  • 支持基于返回类型自动转换属性:
    protected function createdAt(): Attribute {
        return Attribute::make(
            get: fn ($value) => Carbon::parse($value),
            set: fn ($value) => $value->toDateTimeString(),
        );
    }
    


7. Blade 组件改进

  • 支持动态渲染组件:
    <x-dynamic-component :component="$componentName" />
    

  • Slot 命名支持:
    <x-card>
        <x-slot:title>Custom Title</x-slot>
    </x-card>
    


8. 测试辅助方法增强

  • 新增 expects() 方法模拟事件监听:
    $this->expects(OrderShipped::class);
    

  • has()hasNo() 方法简化数据库断言:
    $this->assertDatabaseHas('users', ['email' => 'test@example.com']);
    


9. Flysystem 升级至 v3

  • 文件存储适配器更新至 Flysystem v3,优化云存储(S3、FTP)集成性能。


总结

Laravel 9.x 在性能、开发体验与现代 PHP 特性适配方面进行了全面升级,同时保持向后兼容性。升级时需注意:

  • 检查 PHP 环境(≥8.0)
  • 调整邮件驱动配置
  • 测试自定义迁移与存储逻辑

官方文档提供完整的 升级指南 以平滑过渡。

Logo

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

更多推荐