Laravel 8.x十大核心特性深度解析

好的,Laravel 8.x 版本引入了多项重要特性与改进:

1. Laravel Jetstream

  • 提供了一套现代化的应用脚手架,整合了 Livewire 或 Inertia.js 栈。
  • 包含登录、注册、邮箱验证、双因素认证、会话管理、API 支持等开箱即用的功能。
  • 替代了之前的 Laravel UI,提供更丰富的起点。

2. 模型工厂类 (Model Factory Classes)

  • 模型工厂从基于函数的定义转变为基于类的定义。
  • 例如:
php 复制代码
// Laravel 7.x 及之前 (database/factories/UserFactory.php)
$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
    ];
});

// Laravel 8.x (database/factories/UserFactory.php)
class UserFactory extends Factory {
    public function definition() {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
        ];
    }
}

更符合现代 PHP 的面向对象风格。

3. 迁移压缩 (Migration Squashing)

  • 允许将应用程序的多个迁移文件压缩成单个 SQL 文件。
  • 使用命令 php artisan schema:dump。
  • 可以显著减少运行测试时加载迁移的数量,提升测试速度。

4. 改进的路由缓存 (Improved Route Caching)

  • 使用 php artisan route:cache 时,现在会先执行 php artisan route:clear,避免旧缓存问题。
  • 提高了路由缓存的可靠性。

5. 模型命名空间调整 (默认 App\Models)

  • artisan make:model 命令现在默认将模型创建在 App\Models 目录下。
  • 更符合现代应用程序的目录组织结构。之前的版本默认在 App 根目录下。

6. 队列批处理 (Job Batching)

  • 允许将一组作业作为一个可管理的"批处理"进行调度和监控。
  • 提供方法跟踪批处理的进度、状态和完成情况。
php 复制代码
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Bus;
use App\Jobs\ProcessPodcast;
use Throwable;

$batch = Bus::batch([
    new ProcessPodcast(1),
    new ProcessPodcast(2),
    new ProcessPodcast(3),
])->then(function (Batch $batch) {
    // 所有作业成功完成...
})->catch(function (Batch $batch, Throwable $e) {
    // 批处理中首次检测到失败的作业...
})->finally(function (Batch $batch) {
    // 批处理执行完毕(无论成功或失败)...
})->dispatch();

7. 速率限制改进 (Rate Limiting Improvements)

  • 在路由中定义速率限制器变得更加灵活和强大。
  • 支持自定义响应和条件限制。
php 复制代码
Route::get('/api/users', function () {
    //
})->middleware(['throttle:api']);

可以在 App\Providers\RouteServiceProvider 中配置 api 限制器。

8. 时间测试助手改进 (Improved Time Testing Helpers)

  • Illuminate\Support\Carbon 新增了 setTestNow($now = null) 方法。
  • 提供了更简洁的方式来在测试中操纵时间。

9. 动态 Blade 组件属性

  • 允许将 HTML 属性动态传递给 Blade 组件。
blade 复制代码
<x-alert :$type :$message class="mt-4"/>

组件内部可以通过 {``{ $attributes }} 接收所有属性。

10. dispatchAfterResponse 方法

  • 允许在 HTTP 响应发送到浏览器之后才将作业推送到队列。
php 复制代码
ProcessPodcast::dispatchAfterResponse();

11. Eloquent 改进

  • whereHas / orWhereHas 嵌套支持:允许更复杂的关联查询。
  • doesntHave / orDoesntHave 嵌套支持。
  • upsert 方法:实现"插入或更新"操作。
php 复制代码
Flight::upsert([
    ['departure' => 'LAX', 'destination' => 'NYC', 'price' => 150],
    ['departure' => 'LHR', 'destination' => 'AMS', 'price' => 200]
], ['departure', 'destination'], ['price']);

12. 测试改进

  • HTTP 测试断言 :新增了如 assertCreated、assertForbidden、assertNoContent 等断言方法。
  • 数据库测试 :新增了 expectsDatabaseQueryCount 方法,用于断言测试期间执行的数据库查询数量。

13. 事件监听器优化

  • 可以在事件监听器中返回 false 来停止事件的传播。

这些特性显著提升了 Laravel 的开发效率、代码组织、测试便利性和应用性能。

相关推荐
niucloud-admin26 分钟前
NIUCLOUD LITE AI开发文档--基础开发规范
开发语言·php
ESDWAN2 小时前
为什么跨境网络白天正常、晚上卡顿?如何分析时段性?
linux·网络·php·网络运维
狗凯之家源码网11 小时前
全新 PHP 轻量客服聊天室源码深度评测
开发语言·php·聊天室系统
catchadmin13 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.4.1 发布,新增 MCP 支持
开发语言·php
是真的小外套15 小时前
第13章:网络安全漏洞防护原理与应用
安全·web安全·php
狗凯之家源码网15 小时前
纯 PHP+MySQL 应用市场系统源码实测!
开发语言·mysql·php
青柠之夏cc17 小时前
Laravel服务容器底层原理揭秘
javascript·rpc·laravel
2301_322414280418 小时前
基于web的校园失物招领管理系统59695-计算机毕设 原创(免费领源码+部署教程+开发环境)
mysql·nginx·php·apache·thinkphp·phpstudy·wampserver
4SAPI21 小时前
官方API、API聚合平台与自建LLM Gateway:三种方案怎么选
大数据·人工智能·gateway·php
sbjdhjd1 天前
从 preg_replace 规则到缓存绕过:一次授权 PHP 防护实验中的图片载荷、回调检测与哈希碰撞复盘
网络安全·数据挖掘·php·文件包含·宝塔·哈希·火绒