Laravelでリクエストパラメータの値を変更する方法


94

リクエストパラメータの値を次のように変更する必要があります。

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

私はこのコードを使用していますが、機能しません:

$request->offsetSet('img', $img);

1
Laravelの変更入力値の重複の可能性-答えは一番上の質問へのコメントにあります。
Joel Hinz 2016

回答:


59

使用merge()

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

シンプル!全体$request->all()を別の変数に転送する必要はありません。


187

次のことを試してください。

$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()の
呼び出し

put()はコレクションメソッドであり、$ request-> all()は配列を返します。
Joel Hinz 2016

3
リクエストオブジェクトには、実際にはreplace()メソッドとmerge()メソッドがあります。私は一般的にそれらを使用することを好みます。それについてのSOの答えについては、質問に対する私のコメントを参照してください。
Joel Hinz 2016

@ JoelHinz、Laravel 5では機能しないと思いました。なぜなら、これらの方法の使用に問題を抱えている投稿をいくつか見たからです。しかし、私RequestはL5のソースコードを調べたところ、これらのメソッドを見ることができます。ありがとう。
Alexey Mezenin 2016

4
汗かいていない。しかし、あなたの答えはまだ間違っています。replace()メソッドは入力全体を置き換えます。1つの値のみを置き換える場合はmerge()が必要です。
Joel Hinz 2016

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
注意してください。replaceメソッドは元のリクエストデータを削除し、すべてを配列に置き換えます。\ Symfony \ Component \ HttpFoundation \ ParameterBag 54行目publicfunction 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.