Laravel 8.x新特性全解析

好的,Laravel 8.x 版本引入了多项重要特性和改进,以下是主要亮点:


🚀 Jetstream 应用脚手架

Laravel 8 引入了 Jetstream ,这是一个现代化的应用脚手架,替代了之前的 laravel/ui 包。Jetstream 提供:

  • 基于 LivewireInertia.js 的前端栈选择
  • 开箱即用的用户认证(登录、注册、邮箱验证、双因素认证)
  • 团队管理功能(适用于 SaaS 类应用)
  • API 支持(通过 Sanctum)
php 复制代码
// 安装 Jetstream(Livewire 版本)
composer require laravel/jetstream
php artisan jetstream:install livewire
npm install && npm run dev

🔄 模型工厂类

模型工厂从闭包形式升级为基于类的语法,更符合面向对象设计:

php 复制代码
// 定义工厂
class UserFactory extends Factory {
    public function definition() {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
        ];
    }
}

// 使用工厂
User::factory()->count(5)->create();

🛣️ 路由优化

  • 默认路由模型绑定 :无需显式绑定(如 Route::get('users/{user}')

  • 路由命名空间 :不再默认添加 App\Http\Controllers 前缀,需显式声明:

    php 复制代码
    Route::get('/profile', [ProfileController::class, 'show']);

📦 模型目录调整

默认模型存放路径从项目根目录移至 app/Models/,例如:

php 复制代码
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
    // ...
}

📊 迁移批处理

新增 Schema::whenTableDoesntHaveColumn() 方法,简化迁移文件中对已有表的修改:

php 复制代码
Schema::table('users', function (Blueprint $table) {
    $table->whenTableDoesntHaveColumn('email_verified_at', 
        function ($table) {
            $table->timestamp('email_verified_at')->nullable();
        }
    );
});

📡 事件监听优化

支持基于接口的事件监听注册:

php 复制代码
class OrderShippedListener implements ShouldQueue {
    public function handle(OrderShipped $event) {
        // 处理逻辑
    }
}

⚡ 速率限制增强

throttle 中间件支持更灵活的速率限制配置:

php 复制代码
Route::middleware('throttle:10,1')->group(function () {
    Route::get('/api/data', [DataController::class, 'index']);
});

🧪 测试辅助方法

新增 assertSoftDeleted() 方法用于测试软删除:

php 复制代码
public function test_user_soft_delete() {
    $user = User::factory()->create();
    $user->delete();
    $this->assertSoftDeleted($user);
}

🔄 队列批处理

新增 Batchable 接口,支持任务批量处理及进度跟踪:

php 复制代码
$batch = Bus::batch([
    new ProcessPodcast(),
    new CompressPodcast(),
])->then(function (Batch $batch) {
    // 批量完成回调
})->dispatch();

📝 Blade 组件标签

引入类似 Vue 的组件标签语法,提升模板可读性:

blade 复制代码
<x-alert type="error" :message="$message">
    <x-slot name="title">Error!</x-slot>
</x-alert>

📌 其他更新

  • PHP 版本要求:最低 PHP 7.3
  • 默认邮件模板:使用 Tailwind CSS 重写
  • 路由缓存优化:支持闭包路由缓存
  • artisan serve 改进 :默认启用更安全的 --host 选项

升级建议:使用 Composer 更新至最新 8.x 版本:

bash 复制代码
composer update laravel/framework

建议结合官方升级指南:Laravel 8.x Upgrade Guide 进行迁移。

相关推荐
dog2508 小时前
网络长尾延时的重尾本质
开发语言·网络·php
其实防守也摸鱼12 小时前
无线网络安全--10 规避WLAN验证之挫败MAC地址限制
网络·智能路由器·php·教程·虚拟机·wlan·无线网络安全
浩风祭月13 小时前
我用 AI 辅助重构了遗留项目的认证模块:从明文存储到 OAuth 2.0 的安全升级
后端·php·ai编程
宋拾壹14 小时前
fastadmin列表中查看列表,并且添加增加相应的数据
javascript·php·fastadmin
weixin_4462608514 小时前
LLM智能体在社交模拟中的决策行为分析:有限状态与LLM-based策略对比研究
开发语言·php
唐青枫16 小时前
Php Doctrine ORM 实战详解:从实体映射到查询、关联与事务
php·symfony
一直奔跑在路上17 小时前
深入浅出RDMA:原理、应用与实战指南
开发语言·php
右耳朵猫AI19 小时前
PHP周刊2026W23 | Composer 2.10、Symfony 8.1、Twig 3.27.1、PHP 8.5、Laravel AI SDK
php·composer·symfony
2401_834636991 天前
Nginx 从入门到实战:静态 / 动态站点、PHP 部署与反向代理全解析
运维·nginx·php
绵绵细雨中的乡音2 天前
监控显示一切正常,可用户根本打不开网站——Blackbox Exporter帮我找到了真相(1)
开发语言·php