在 Laravel 11.2 中使用新的 Fluent Helper 来操作多维数组
发布日期:作者: Paul Redmond
本周,Laravel 团队发布了 v11.2 版本,其中包含 fluent() 支持助手、context() 助手、改进的缺失数据库处理(在 migrate
操作期间)、以及更多功能。
Fluent Helper
Philo Hermans 在操作多维数组时贡献了一个 fluent()
助手函数。Fluent
类在 Laravel 框架中已经存在一段时间了;然而,此 PR 引入了一个助手便利方法来创建一个 fluent 对象实例
$data = [ 'user' => [ 'name' => 'Philo', 'address' => [ 'city' => 'Amsterdam', 'country' => 'Netherlands', ] ], 'posts' => [ [ 'title' => 'Post 1', ], [ 'title' => 'Post 2', ] ]]; collect($data)->get('user');fluent($data)->user; collect($data)->get('user')['name'];fluent($data)->get('user.name'); collect(collect($data)->get('posts'))->pluck('title');fluent($data)->collect('posts')->pluck('title'); json_encode(collect($data)->get('user')['address']);fluent($data)->scope('user.address')->toJson();
Context Helper
Michael Nabil 贡献了一个便利的 context()
助手函数,用于管理 Context。根据传递的参数,您可以将数据添加到 Context 中,获取 Context 对象,或检索它(可选地使用自定义默认值)
// Add user information to the contextcontext(['user' => auth()->user()]); // Retrieve the context object$context = context(); // Retrieve user information from the context$user = context('user'); // Optional custom default value if not found.$some_key = context('key_that_does_not_exist', false);
Context Getter 的默认值
Michael Nabil 贡献了对 Context Getter 的默认值的支持
// Before: Returns null if not foundContext::get('is_user');Context::getHidden('is_user'); // After: Returns `false` if not foundContext::get('is_user', false); // falseContext::getHidden('is_user', false); // falseContext::get('is_user'); // null
作业链测试断言方法
Günther Debrauwer 贡献了 assertHasChain()
和 assertDoesntHaveChain()
方法
public function test_job_chains_foo_bar_job(): void{ $job = new TestJob(); $job->handle(); $job->assertHasChain([ new FooBarJob(); ]); // $job->assertDoesntHaveChain();}
更好的数据库创建/清除处理
Dries Vints 贡献了更好的数据库错误处理 (#50836),在运行 migrate
时数据库尚未创建,以及更新 migrate:fresh
命令以简化数据库不存在时的流程 (#50838)
如果在尚未创建任何数据库的情况下调用
migrate:fresh
命令,它会在尝试清除数据库时失败。此 PR 通过首先检查迁移表是否存在,如果不存在,则立即转到 migrate 命令,跳过 db:wipe 命令来修复此问题。这将调用 migrate 命令流程,随后将到达命令询问用户创建数据库的点。结合 #50836,这将为试图通过 Laravel 安装程序安装 Jetstream 并且选择不创建数据库的人提供更无缝的体验。
以上描述取自 拉取请求 #50838。
字符串修剪删除不可见字符
Dasun Tharanga 贡献了对框架 TrimStrings
中间件的更新,其中不可见字符在 HTTP 请求期间不会被修剪,这会导致提交表单时出现问题。有关详细信息,请参见 拉取请求 #50832。
发行说明
您可以在下面看到新功能和更新的完整列表,以及 11.1.0 和 11.2.0 之间的差异。以下发行说明直接来自 变更日志
v11.2.0
- [11.x] 修复:更新
[@param](https://github.com/param)
,由 @saMahmoudzadeh 在 https://github.com/laravel/framework/pull/50827 中进行 - [11.x] 修复:更新 @return,由 @saMahmoudzadeh 在 https://github.com/laravel/framework/pull/50826 中进行
- [11.x] 修复在旧版 PostgreSQL 上检索生成的列,由 @hafezdivandari 在 https://github.com/laravel/framework/pull/50834 中进行
- [11.x] 修剪不可见字符,由 @dasundev 在 https://github.com/laravel/framework/pull/50832 中进行
- [11.x] 为
Context
上的get
和getHidden
添加默认值,由 @michaelnabil230 在 https://github.com/laravel/framework/pull/50824 中进行 - [11.x] 改进
serve
Artisan 命令,由 @nunomaduro 在 https://github.com/laravel/framework/pull/50821 中进行 - [11.x] 登录一次时重新哈希用户密码,由 @axlon 在 https://github.com/laravel/framework/pull/50843 中进行
- [11.x] 如果数据库不存在,则不要清除数据库,由 @driesvints 在 https://github.com/laravel/framework/pull/50838 中进行
- [11.x] 更好的数据库创建失败处理,由 @driesvints 在 https://github.com/laravel/framework/pull/50836 中进行
- [11.x] 在 SQL Server 上使用默认模式名称,由 @hafezdivandari 在 https://github.com/laravel/framework/pull/50855 中进行
- 更正 startedAs 和 virtualAs 数据库列定义的类型,由 @ollieread 在 https://github.com/laravel/framework/pull/50851 中进行
- 允许在多对多关系中传递查询表达式作为列,由 @plumthedev 在 https://github.com/laravel/framework/pull/50849 中进行
- [11.x] 修复
Middleware::trustHosts(subdomains: true)
,由 @axlon 在 https://github.com/laravel/framework/pull/50877 中进行 - [11.x] 修改 getGateArguments 的文档块,由 @saMahmoudzadeh 在 https://github.com/laravel/framework/pull/50874 中进行
- [11.x] 为 resolve 方法的文档块添加
[@throws](https://github.com/throws)
,由 @saMahmoudzadeh 在 https://github.com/laravel/framework/pull/50873 中进行 - [11.x] Str 修剪方法,由 @patrickomeara 在 https://github.com/laravel/framework/pull/50822 中进行
- [11.x] 添加 fluent 助手,由 @PhiloNL 在 https://github.com/laravel/framework/pull/50848 中进行
- [11.x] 添加一个新的 context 助手,由 @michaelnabil230 在 https://github.com/laravel/framework/pull/50878 中进行
- [11.x] 在作业实例上添加
assertChain
和assertNoChain
,由 @gdebrauwer 在 https://github.com/laravel/framework/pull/50858 中进行 - [11.x] 删除一些类(类、接口和特性命令)中多余的
getDefaultNamespace
方法,由 @saMahmoudzadeh 在 https://github.com/laravel/framework/pull/50880 中进行 - [11.x] 删除 MariaDbConnector 中对 ConnectorInterface 的多余实现,由 @saMahmoudzadeh 在 https://github.com/laravel/framework/pull/50881 中进行
- [11.X] 修复:在使用
cursorPaginate
之前使用orderByRaw
时出现错误,由 @ngunyimacharia 在 https://github.com/laravel/framework/pull/50887 中进行