gpt4 book ai didi

laravel - 如何从请求中的数组中添加/删除元素

转载 作者:行者123 更新时间:2023-12-04 00:04:23 30 4
gpt4 key购买 nike

我的请求是这样的

Array
(
[name] => Eugene A
[address] => Array
(
[billing] => Array
(
[address] => aaa
)
[shipping] => Array
(
[address] => bbb
)
)
)

我需要删除送货地址。但是怎么做呢?

我只能删除两个地址,

$request->request->remove('address');

但我不想要它。

我只想删除送货地址,像这样

$request->request->remove('address.shipping');

但它不适合我

Laravel 5.6

更新

我为什么需要它?

简单。我已经将我的表单请求验证抽象到一个子类中,该类是 Illuminate\Foundation\Http\FormRequest 的子类。我实际上有几个验证类。我在 Controller 中一一调用它们,如下所示:

app()->make(CustomerPostRequest::class); // validate Customer information
app()->make(AddressSaveRequest::class); // validate Addresses

为什么?

现在我可以在单元测试中模拟这些请求,并且可以抽象出我的验证。而且我可以在很多地方使用地址验证。

但现在我需要更多的灵 active 。为什么?

因为 AddressSaveRequest 规则看起来像这样

public function rules(): array
{
return [
'address.*.address' => [
'bail',
'required',
'string',
],
...

它验证所有地址。但有时我不想验证送货地址,如果勾选了 chech_box - ship_to_the_same_address。

但是我将我的地址验证器抽象在单独的文件中,并且在许多地方都使用了它。有些地方没有显示ship_to_the_same_address 复选框。

因此我不能使用 'required_unless:ship_to_same_address,yes',

我不能用

app()->makeWith(AddressSaveRequest::class, ['ship_to_the_same_address ' => 'yes']);

因为泰勒 said ...当调用 makeWith 时。在我看来,每次调用此方法时都应该创建一个新实例,因为给定的参数数组是动态的。。确实如此,但它不能与 app()->instance(AddressSaveRequest::class, $addressSaveRequest); 一起正常工作,并且不能在单元测试中进行模拟。

为什么 Taylor 决定了 - 我真的不知道。

PS是的,我知道不建议使用模拟请求。

最佳答案

如果您尝试从请求本身添加或删除输入:

您可以通过合并数据并让 Laravel 处理正在使用的数据源来轻松地将数据添加到请求中:

$request->merge(['input' => 'value']);

这会将名为 input 的输入合并到请求的输入源中。

要删除输入,您可以尝试替换所有输入,而不需要替换中的特定输入:

$request->replace($request->except('address.shipping'));

只有一个想法可以尝试。

关于laravel - 如何从请求中的数组中添加/删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51606998/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com