Laravel 8.x 于2020年9月发布,引入了多项重要改进,以下是核心特性详解:

1. Laravel Jetstream

  • 现代化应用脚手架:替代原有认证脚手架
  • 集成技术栈
    // 安装命令示例
    composer require laravel/jetstream
    php artisan jetstream:install livewire
    

  • 支持 LivewireInertia.js 两种前端栈
  • 内置双因素认证、会话管理、API支持

2. 模型工厂类重构

// 旧版工厂 (基于函数)
$factory->define(App\User::class, function (Faker $faker) {...});

// 新版工厂 (基于类)
class UserFactory extends Factory {
    public function definition() {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
        ];
    }
}

3. 迁移压缩

解决迁移文件过多问题:

php artisan schema:dump
# 生成 schema/migrations.sql

  • 执行新迁移时优先读取SQL文件
  • 保留未执行迁移的灵活性

4. 任务批处理

use Illuminate\Bus\Batch;
use App\Jobs\ProcessPodcast;

Batch::dispatch([
    new ProcessPodcast(1),
    new ProcessPodcast(2),
])->then(function (Batch $batch) {
    // 批处理完成回调
})->catch(function (Batch $batch, Throwable $e) {
    // 异常处理
});

5. 路由命名空间调整

  • 移除 RouteServiceProvider 中的默认控制器命名空间
  • 需显式指定完整类名:
// 原方式
Route::get('/user', 'UserController@index');

// 新方式
use App\Http\Controllers\UserController;
Route::get('/user', [UserController::class, 'index']);

6. 事件监听器优化

  • 自动发现事件监听器
  • 无需在 EventServiceProvider 中手动注册
  • 约定:Listeners 目录下文件自动关联同名事件

7. 速率限制增强

Route::middleware(['throttle:api'])->group(function () {
    Route::get('/profile', function () {
        // 每分钟60次请求限制
    });
});

  • 支持Redis驱动
  • 自定义限制策略:RateLimiter::for()

8. Blade组件改进

  • 动态组件渲染:
<x-dynamic-component :component="$componentName" class="mt-4" />

  • 属性合并:自动合并class属性
  • 内联视图组件:@component 语法简化

9. 时间测试助手

// 冻结时间
$this->travelTo(now()->subDays(10));

// 时间前进
$this->travel(5)->days();

10. 其他改进

  • 队列 retryUntil() 方法弃用 → 改用 backoff() 属性
  • artisan serve 命令支持热重载
  • assertDeleted() 更名 → assertModelMissing()
  • 默认启用 tailwindcss 替代Bootstrap

升级建议:使用官方升级工具 laravel-shift 进行平滑迁移,特别注意路由和控制器的命名空间调整。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐