Laravel Laravel

以下是翻译后的版本:

  • 序章

    • 发布说明
    • 升级指南
    • 贡献指南
  • 快速开始

    • 安装
    • 配置
    • 目录结构
    • 前端
    • 入门套件
    • 部署
  • 架构概念

    • 请求生命周期
    • 服务容器
    • 服务提供者
    • 门面
  • 基础

    • 路由
    • 中间件
    • CSRF 保护
    • 控制器
    • 请求
    • 响应
    • 视图
    • Blade 模板
    • 资源打包
    • URL 生成
    • 会话
    • 验证
    • 错误处理
    • 日志记录
  • 深入探讨

    • Artisan 控制台
    • 广播
    • 缓存
    • 集合
    • 并发
    • 上下文
    • 契约
    • 事件
    • 文件存储
    • 辅助函数
    • HTTP 客户端
    • 本地化
    • 邮件
    • 通知
    • 包开发
    • 进程
    • 队列
    • 速率限制
    • 字符串
    • 任务调度
  • 安全

    • 认证
    • 授权
    • 邮件验证
    • 加密
    • 哈希
    • 密码重置
  • 数据库

    • 快速开始
    • 查询构建器
    • 分页
    • 迁移
    • 数据填充
    • Redis
    • MongoDB
  • Eloquent ORM

    • 快速开始
    • 关系
    • 集合
    • 变换器/类型转换
    • API 资源
    • 序列化
    • 工厂
  • 测试

    • 快速开始
    • HTTP 测试
    • 控制台测试
    • 浏览器测试
    • 数据库测试
    • Mock 测试
  • 软件包

    • Breeze
    • Cashier(Stripe)
    • Cashier(Paddle)
    • Dusk
    • Envoy
    • Fortify
    • Folio
    • Homestead
    • Horizon
    • Jetstream
    • Mix
    • Octane
    • Passport
    • Pennant
    • Pint
    • Precognition
    • Prompts
    • Pulse
    • Reverb
    • Sail
    • Sanctum
    • Scout
    • Socialite
    • Telescope
    • Valet
  • API 文档
Icon

提示 您正在浏览旧版本的 Laravel 的文档. 请考虑将你的项目升级到 Laravel 11.x.

升级指南
10.x
10.x 9.x 8.5 8.x 7.x 6.x 5.8 5.7 5.6 5.5 5.4 5.3 5.2 5.1

Laravel 10 中文文档 /

未匹配的标注

升级指南

  • 从 9.x 升级到 10.0

高影响变化

  • 更新依赖项
  • 更新最小稳定性

中等影响变化

  • 数据库表达式
  • 模型 “日期” 属性
  • Monolog 3
  • Redis缓存标签
  • 服务模拟
  • 语言目录

较小影响变化

  • Closure 验证规则消息
  • Public 路径绑定
  • Query 异常构造函数
  • Rate Limiter 返回值
  • 关系 getBaseQuery 方法
  • Redirect::home 方法
  • Bus::dispatchNow 方法
  • registerPolicies 方法
  • ULID 列

从 9.x 升级到 10.0

预计升级时间:10 分钟

注意
我们试图记录每一个可能的破坏性变更。由于其中一些破坏性变更位于框架的底层部分,因此只有其中一部分变更实际上会影响你的应用程序。想节省时间吗?你可以使用 Laravel Shift 来帮助自动升级你的应用程序。

更新依赖项

影响可能性:高

要求 PHP 8.1.0

Laravel 现在要求 PHP 8.1.0 或更高版本。

要求 Composer 2.2.0

Laravel 现在要求 Composer 2.2.0 或更高版本。

更新 Composer 依赖项

你应该在应用程序的 composer.json 文件中更新以下依赖项:

  • laravel/framework 更新到 ^10.0
  • laravel/sanctum 更新到 ^3.2
  • doctrine/dbal 更新到 ^3.0
  • spatie/laravel-ignition 更新到 ^2.0

如果你从 2.x 发布系列升级到 Sanctum 3.x,请参考 Sanctum升级指南。

此外,如果你想使用 PHPUnit 10,则应该从应用程序的 phpunit.xml 配置文件的 <coverage> 部分中删除 processUncoveredFiles 属性。然后,更新应用程序的 composer.json 文件中的以下依赖项:

  • nunomaduro/collision 更新到 ^7.0
  • phpunit/phpunit 更新到 ^10.0

最后,检查应用程序使用的任何其他第三方包,并验证你正在使用 Laravel 10 支持的适当版本。

最小稳定性

你应该将应用程序的 composer.json 文件中的 minimum-stability 设置更新为 stable:

"minimum-stability": "stable",

应用程序

绑定公共路径

影响可能性:低

如果你的应用程序将通过 path.public 绑定到容器来自定义其「公共路径」,则应该更新你的代码以调用 Illuminate\Foundation\Application 对象提供的 usePublicPath 方法:

app()->usePublicPath(__DIR__.'/public');

授权

<code>registerPolicies</code> 方法

影响可能性:低

框架会自动调用 AuthServiceProvider 的 registerPolicies 方法。因此,你可以从应用程序的 AuthServiceProvider 的 boot 方法中删除对此方法的调用。

缓存

Redis 缓存标签

影响可能性:中等

Redis 的 缓存标签 支持已被重新编写,以提供更好的性能和存储效率。在 Laravel 的之前的版本中,如果使用 Redis 作为应用程序的缓存驱动程序,则会在缓存中累积旧的缓存标签。

然而,为了正确地删除过时的缓存标记项,Laravel 新的 cache:prune-stale-tags Artisan 命令应该在你的应用程序的 App\Console\Kernel 类中 预定:

$schedule->command('cache:prune-stale-tags')->hourly();

数据库

数据库表达式

影响可能性:中等

Laravel 10.x 重新编写了数据库 “表达式” (通常是通过 DB::raw 生成),以便在未来提供额外的功能。需要注意的是,语法的原始字符串值现在必须通过表达式的 getValue(Grammar $grammar) 方法检索。现在不再支持将表达式强制转换为字符串使用 (string) 。

通常,这不会影响最终用户的应用程序;但是,如果你的应用程序正在手动将数据库表达式强制转换为字符串使用 (string) 或直接调用表达式的 __toString 方法,则应该更新你的代码以调用 getValue 方法:

use Illuminate\Support\Facades\DB;

$expression = DB::raw('select 1');

$string = $expression->getValue(DB::connection()->getQueryGrammar());

查询异常构造函数

影响可能性:非常低

Illuminate\Database\QueryException 构造函数现在接受一个字符串连接名称作为其第一个参数。如果你的应用程序正在手动抛出此异常,则应相应调整你的代码。

ULID 列

影响可能性:低

当迁移调用 ulid 方法而没有任何参数时,列现在将被命名为 ulid。在 Laravel 的以前版本中,调用此方法而没有任何参数会创建一个错误命名为 uuid 的列:

$table->ulid();

在调用 ulid 方法时显式指定列名,可以将列名传递给该方法:

$table->ulid('ulid');

Eloquent

模型 “Dates” 属性

影响可能性:中等

已删除 Eloquent 模型中已过时属性。现在,你的应用程序应该使用$casts 属性:

protected $casts = [
    'deployed_at' => 'datetime',
];

关系 <code>getBaseQuery</code> 方法

影响可能性:非常低

在 Illuminate\Database\Eloquent\Relations\Relation 类中的 getBaseQuery 方法已更名为 toBase。

本地化

语言目录

影响可能性:无

虽然不涉及现有应用程序,但 Laravel 应用程序骨架不再默认包含 lang 目录。相反,在编写新的 Laravel 应用程序时,可以使用 lang:publish Artisan 命令进行发布:

php artisan lang:publish

日志

Monolog 3

影响可能性:中等

Laravel 的 Monolog 依赖项已更新为 Monolog 3.x。如果你正在直接与 Monolog 交互,则应该查看 Monolog 的升级指南。

如果你正在使用 BugSnag 或 Rollbar 等第三方日志记录服务,请确保将这些第三方包升级到支持 Monolog 3.x 和 Laravel 10.x 版本的版本。

队列

<code>Bus::dispatchNow</code> 方法

影响可能性:低

已删除过时的 Bus::dispatchNow 和 dispatch_now 方法。目前你的应用程序应该分别使用 Bus::dispatchSync 和 dispatch_sync 方法。

路由

中间件别名

影响可能性:非强制

在新的 Laravel 应用程序中,App\Http\Kernel 类的 $routeMiddleware 属性已更名为 $middlewareAliases,以更好地反映其用途。你可以在现有应用程序中重命名此属性,但不是强制的。

限速器返回值

影响可能性: 低

调用 RateLimiter::attempt 方法时,该方法现在将返回由提供的闭包返回的值。如果没有返回任何值或返回 null,则 attempt 方法将返回 true:

$value = RateLimiter::attempt('key', 10, fn () => ['example'], 1);

$value; // ['example']

<code>Redirect::home</code> 方法

影响可能性: 非常低

已删除不推荐使用的 Redirect::home 方法。相反,你的应用程序应该重定向到一个明确命名的路由:

return Redirect::route('home');

测试

服务模拟

影响可能性: 中等

已从框架中删除不推荐使用的 MocksApplicationServices 特性。该特性提供了类似于 expectsEvents、expectsJobs 和 expectsNotifications 这样的测试方法。

如果你的应用程序使用这些方法,我们建议你过渡到 Event::fake、Bus::fake 和 Notification::fake。你可以通过相应组件的文档了解有关模拟的更多信息。

验证

闭包验证规则消息

影响可能性: 非常低

当编写基于闭包的自定义验证规则时,调用 $fail 回调超过一次,现在会将消息附加到数组中,而不是覆盖先前的消息。通常,这不会影响你的应用程序。

此外,$fail 回调现在返回一个对象。如果你之前对验证闭包的返回类型进行了类型提示,这可能需要你更新你的类型提示:

public function rules()
{
    'name' => [
        function ($attribute, $value, $fail) {
            $fail('validation.translation.key')->translate();
        },
    ],
}

其他

我们还鼓励你查看 laravel/laravel GitHub 存储库 中的更改。虽然这些更改中许多都不是必需的,但你可能希望将这些文件与你的应用程序保持同步。本次升级指南将覆盖部分更改,但其他的更改,例如对配置文件或注释的更改,不会被覆盖。

你可以使用 GitHub 比较工具 轻松查看更改,并选择哪些更新对你重要。但是,GitHub 比较工具显示的许多更改都是由于我们的组织采用了 PHP 本地类型。这些更改是向后兼容的,迁移到 Laravel 10 期间采用它们是可选的。

本文章首发在 网站上。



原文地址:/cndocs/10.x/up...

译文地址:/cndocs/10.x/up...

上一篇 下一篇

成为Laravel合作伙伴

Laravel Partners是提供一流Laravel开发和咨询服务的精英商店。我们每个合作伙伴都可以帮助您制定一个精美,结构完善的项目.

我们的伙伴
Laravel
亮点
  • Our Team
  • 发布说明
  • 入门
  • 路由
  • Blade 模板
  • 身份验证
  • 用户授权
  • Artisan 控制台
  • 数据库
  • Eloquent ORM
  • 测试
资源
  • Laravel Bootcamp
  • Laracasts
  • Laravel News
  • Laracon
  • Laracon EU
  • Laracon India
  • Jobs
  • Forums
  • Trademark
  • 版本发布时间
  • 包开发
  • 命令行应用
  • TALL stack全栈开发
  • Blade UI Kit
  • 前端资源构建
伙伴
  • WebReinvent
  • Vehikl
  • Tighten
  • 64 Robots
  • Active Logic
  • Byte 5
  • Curotec
  • Cyber-Duck
  • DevSquad
  • Jump24
  • Kirschbaum
生态系统
  • Cashier
  • Dusk
  • Echo
  • Envoyer
  • Forge
  • Horizon
  • Nova
  • Octane
  • Sail
  • Sanctum
  • Scout
  • Spark
  • Telescope
  • Valet
  • Vapor

Laravel是一个具有表达力,优雅语法的Web应用程序框架。我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。Laravel试图通过减轻大多数Web项目中使用的常见任务来减轻开发的痛苦.

Laravel是Taylor Otwell的商标.
Copyright © 2011-2025 Laravel中文网 LLC.

  • Twitter
  • GitHub
  • Discord
Laravel 全栈开发网 推荐使用阿里云 按Ctrl+D试试