Laravel 8.x核心特性全面解析

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

1. Laravel Jetstream

  • 现代化应用脚手架:替代原有认证脚手架

  • 集成技术栈

    php 复制代码
    // 安装命令示例
    composer require laravel/jetstream
    php artisan jetstream:install livewire
  • 支持 LivewireInertia.js 两种前端栈

  • 内置双因素认证、会话管理、API支持

2. 模型工厂类重构

php 复制代码
// 旧版工厂 (基于函数)
$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. 迁移压缩

解决迁移文件过多问题:

bash 复制代码
php artisan schema:dump
# 生成 schema/migrations.sql
  • 执行新迁移时优先读取SQL文件
  • 保留未执行迁移的灵活性

4. 任务批处理

php 复制代码
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 中的默认控制器命名空间
  • 需显式指定完整类名:
php 复制代码
// 原方式
Route::get('/user', 'UserController@index');

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

6. 事件监听器优化

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

7. 速率限制增强

php 复制代码
Route::middleware(['throttle:api'])->group(function () {
    Route::get('/profile', function () {
        // 每分钟60次请求限制
    });
});
  • 支持Redis驱动
  • 自定义限制策略:RateLimiter::for()

8. Blade组件改进

  • 动态组件渲染:
blade 复制代码
<x-dynamic-component :component="$componentName" class="mt-4" />
  • 属性合并:自动合并class属性
  • 内联视图组件:@component 语法简化

9. 时间测试助手

php 复制代码
// 冻结时间
$this->travelTo(now()->subDays(10));

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

10. 其他改进

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

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

相关推荐
深邃-2 小时前
【Web安全】-Kali,Linux配置(2):Java环境配置,Python环境配置,Conda使用,PIP配置使用,SSH远程登录
java·linux·python·安全·web安全·网络安全·php
2401_873479402 小时前
遭遇DDoS攻击后如何快速分析攻击源?用IP查询+离线库定位异常IP
服务器·开发语言·tcp/ip·php
niucloud-admin11 小时前
PHP V6 单商户常见问题——如何修改访问域名默认跳转端口
php
catchadmin11 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
郑州光合科技余经理12 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
niucloud-admin13 小时前
PHP V6 单商户常见问题——在线升级版本失败后如何回退版本数据
php
0xR3lativ1ty13 小时前
关闭公网IP的两种方式
网络协议·tcp/ip·php
白晨并不是很能熬夜14 小时前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio
2401_8734794016 小时前
固件升级如何按地区分批推送?IP地址查询定位决定升级策略
网络协议·tcp/ip·php