升级指南
高影响变更
低影响变更
从 11.x 升级到 12.0
预计升级时间:5 分钟
我们尝试记录每一个可能发生的重大更改。由于其中一些重大更改发生在框架的隐蔽部分,因此只有一部分更改实际上可能会影响您的应用程序。想要节省时间?您可以使用 Laravel Shift 来帮助自动化您的应用程序升级。
更新依赖
影响可能性:高
您应该在应用程序的 composer.json
文件中更新以下依赖项
laravel/framework
更新为^12.0
Carbon 3
影响可能性:低
已移除对 Carbon 2.x 的支持。所有 Laravel 12 应用程序现在都需要 Carbon 3.x。
更新 Laravel 安装器
如果您正在使用 Laravel 安装器 CLI 工具创建新的 Laravel 应用程序,则应更新您的安装器安装,使其与 Laravel 12.x 和新的 Laravel 入门套件兼容。如果您通过 composer global require
安装了 Laravel 安装器,则可以使用 composer global update
更新安装器
1composer global update laravel/installer
如果您最初通过 php.new
安装了 PHP 和 Laravel,您可以简单地重新运行适用于您操作系统的 php.new
安装命令,以安装最新版本的 PHP 和 Laravel 安装器
1/bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"
1# Run as administrator...2Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://php.new/install/windows/8.4'))
1/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.4)"
或者,如果您正在使用 Laravel Herd 捆绑的 Laravel 安装器副本,则应将您的 Herd 安装更新到最新版本。
并发
并发结果索引映射
影响可能性:低
当使用关联数组调用 Concurrency::run
方法时,并发操作的结果现在与其关联的键一起返回
1$result = Concurrency::run([2 'task-1' => fn () => 1 + 1,3 'task-2' => fn () => 2 + 2,4]);5 6// ['task-1' => 2, 'task-2' => 4]
数据库
多模式数据库检查
影响可能性:低
Schema::getTables()
、Schema::getViews()
和 Schema::getTypes()
方法现在默认包含来自所有模式的结果。您可以传递 schema
参数以仅检索给定模式的结果
1// All tables on all schemas...2$tables = Schema::getTables();3 4// All tables on the 'main' schema...5$table = Schema::getTables(schema: 'main');6 7// All tables on the 'main' and 'blog' schemas...8$table = Schema::getTables(schema: ['main', 'blog']);
Schema::getTableListing()
方法现在默认返回模式限定的表名。您可以传递 schemaQualified
参数来根据需要更改行为
1$tables = Schema::getTableListing();2// ['main.migrations', 'main.users', 'blog.posts']3 4$table = Schema::getTableListing(schema: 'main');5// ['main.migrations', 'main.users']6 7$table = Schema::getTableListing(schema: 'main', schemaQualified: false);8// ['migrations', 'users']
db:table
和 db:show
命令现在在 MySQL、MariaDB 和 SQLite 上输出所有模式的结果,就像 PostgreSQL 和 SQL Server 一样。
请求
嵌套数组请求合并
影响可能性:低
$request->mergeIfMissing()
方法现在允许使用“点”符号合并嵌套数组数据。如果您之前依赖此方法来创建包含键的“点”符号版本的顶级数组键,则可能需要调整您的应用程序以适应此新行为
1$request->mergeIfMissing([2 'user.last_name' => 'Otwell',3]);
验证
图片验证现在排除 SVG
image
验证规则默认不再允许 SVG 图像。如果您想在使用 image
规则时允许 SVG,则必须显式允许它们。
1use Illuminate\Validation\Rules\File;2 3'photo' => 'required|image:allow_svg'4 5// Or...6'photo' => ['required', File::image(allowSvg: true)],
其他
我们还鼓励您查看 laravel/laravel
GitHub 仓库中的更改。虽然其中许多更改不是必需的,但您可能希望使这些文件与您的应用程序保持同步。本升级指南将涵盖其中一些更改,但其他更改(例如对配置文件或注释的更改)将不涵盖。您可以使用 GitHub 比较工具轻松查看更改,并选择对您重要的更新。