如何在Laravel中更改请求参数的值


Answers:


57

用途merge()

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

简单!无需将整个传递$request->all()给另一个变量。


186

尝试:

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

另一种方法是:

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

感谢@JoelHinz。

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

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

如果您不注入Request $request对象,则可以使用全局request()帮助器或\Request::外观来代替$request


错误:调用未定义的方法Illuminate \ Http \ Request :: put()
Morteza Negahi,2016年

put()是一个收集方法,$ request-> all()返回一个数组。
乔尔·辛兹

3
该请求对象实际上具有replace()和merge()方法。我通常更喜欢使用那些。请参阅我对该问题的评论,以获取对此的解答。
Joel Hinz

@JoelHinz,我以为它们在Laravel 5中不起作用,因为我看到很少有人在使用这些方法时遇到麻烦。但是我已经研究Request了L5的源代码,并且可以看到这些方法。谢谢。
Alexey Mezenin

4
没汗 但是,您的答案仍然是错误的。replace()方法将替换整个输入-如果只想替换一个值,则需要merge()。
Joel Hinz

8

如果您需要自定义请求

$data = $request->all();

您可以传递字段名称和值

$data['product_ref_code'] = 1650;

最后传递新要求

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

2

很好的答案,但是我需要替换JSON请求中的值。在深入研究代码之后,我想到了以下代码。让我知道我是否在做蠢事。

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

2

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

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

1
请注意,替换方法将删除原始请求数据,然后将其替换为您的数组。\ Symfony \ Component \ HttpFoundation \ ParameterBag第54行公共函数replace(array $ parameters = []){$ this-> parameters = $ parameters; }
奥列格

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'),
        ]);
    }
}

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


1

它对我有用

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

检查输出

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.