如何在幼鱼中改变请求参数的值

我需要像下面这样改变请求参数的值:

$request->name = "My Value!";

我使用这个代码,但是不起作用:

$request->offsetSet('img', $img);
191707 次浏览

尝试:

$requestData = $request->all();
$requestData['img'] = $img;

另一种方法是:

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

感谢@JoelHinz。

如果要添加或覆盖嵌套数据:

$data['some']['thing'] = 'value';
$request->merge($data);

如果不注入 Request $request对象,则可以使用全局 request()助手或 \Request:: facade 而不是 $request

如果您需要自定义请求

$data = $request->all();

可以传递字段的名称和值

$data['product_ref_code'] = 1650;

最后通过新的请求

$last = Product::create($data);

使用 merge():

$request->merge([
'user_id' => $modified_user_id_here,
]);

很简单! 不需要将整个 $request->all()转移到另一个变量。

点击这里阅读更多关于 Laravel 的 merge():

Https://laravel.com/docs/collections#method-merge

对我有用

$request = new Request();
$request->headers->set('content-type', 'application/json');
$request->initialize(['yourParam' => 2]);

检查输出

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2

如果使用自定义验证请求、替换验证数据请求或设置默认数据请求(对于复选框或其他请求) ,请使用重写方法 prepareForValidation()

namespace App\Http\Requests\Admin\Category;
    

class CategoryRequest extends AbstractRequest
{
protected function prepareForValidation()
{
if ( ! $this->get('url')) {
$this->merge([
'url' => $this->get('name'),
]);
}
$this->merge([
'url'    => \Str::slug($this->get('url')),
'active' => (int)$this->get('active'),
]);
}
}

我希望这个信息对某些人有用。

这里的答案很棒,但是我需要替换 JSON 请求中的一个值。在对代码进行了一些深入研究之后,我得出了以下代码。如果我做了什么蠢事就告诉我。

$json = $request->json()->all();
$json['field'] = 'new value';
$request->json()->replace($json);

如果需要更新请求中的属性,我建议您使用 Laravel 使用的 Request 类中的 place 方法

$request->replace(['property to update' => $newValue]);

使用 add

$request->request->add(['img' => $img]);

试试这个:

$request["name"] = "My New Value";
$request["img"]  = $img;

这招在 Laravel 8中管用。

另外,确保更新模型类。

Item
{
fillable=[
'img',
... // other attributes
];
}

在更新对象项目的情况下,您可以写下面的行

$Obj = $request->data;
$Obj['item'] = value;