Laravelはリクエスト配列に値を追加する方法があります


113

Eloquent関数を呼び出す前にRequestパラメーターを指定してstore()またはupdate()メソッドを呼び出してリクエストに値を追加しているときに、Laravelで状況が発生しました。そのための方法はあります。

function store(Request $request) 
{
  // some additional logic or checking
  User::create($request->all());
}

どんな治療をしたいですか?キー値を$request->all()配列に追加しますか?
Hammerbot 2016年

はい、キー値を追加する必要があります
Vijayanand Premnath 2016年

array_add()ヘルパーが使えませんか?$array = array_add($request->all(), 'new_key', $value);laravel.com/docs/5.2/helpers#method-array-addこれがあなたが探している種類のものではない場合、あなたの質問にもっと情報を提供できますか?
Hammerbot 2016年

$ requestはphpオブジェクトです。私の理解では、コントローラーの側面にいくつかの機能を追加する場合は、リクエストオブジェクトを配列に変換してから、必要なものを追加します
Chathura Hettiarachchi 2016年

回答:


207

通常、Requestオブジェクトには何も追加したくないので、コレクションとput()ヘルパーを使用することをお勧めします。

function store(Request $request) 
{
    // some additional logic or checking
    User::create(array_merge($request->all(), ['index' => 'value']));
}

または、配列を結合することもできます

User::create($request->all() + ['index' => 'value']);

ただし、本当にRequestオブジェクトに何かを追加したい場合は、次のようにします。

$request->request->add(['variable' => 'value']); //add request

3
はい、今は機能しています。コードをfunction store(Request $ request){//追加のロジックまたはチェック$ plan = 123;として変更しました。//ユーザーの計画を決定するためのロジック$ request-> request-> add(['plan' => $ plan]); User :: create($ request-> all()); }
Vijayanand Premnath 2016年

1
$ request-> all()はコレクションではなく配列であるため、これは機能しません。
kjdion84 2017年

1
$ request-> request-> add(['variable' => 'value']);でなければならないと思います。
Sergey Onishchenko 2018

$ request-> request-> add ...「Undefinedvariable:request」というエラーメッセージが表示されましたが、「use Illuminate \ Http \ Request;」というエラーメッセージが表示されたのはなぜですか。
robspin 2018年

$ request = collect();する必要がありますか?最初?$ resquestはコレクションまたは配列ですか?
robspin 2018年

58

Alexey Mezenin答えを参照してください:

彼の答えを使用している間、私はリクエストオブジェクトに直接何かを追加して使用する必要がありました:

$request->request->add(['variable', 'value']);

これを使用すると、2つの変数が追加されます。

$request[0] = 'variable', $request[1] = 'value'

あなたが私のような初心者で、連想配列が必要な場合、正しい方法は次のとおりです。

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

私があなたの時間を節約したことを願っています

PS:ありがとう@Alexey、あなたは本当にあなたの答えを手伝ってくれました


$ request-> request-> add ...「Undefinedvariable:request」というエラーメッセージが表示されましたが、「use Illuminate \ Http \ Request;」というエラーメッセージが表示されたのはなぜですか。
robspin 2018年

@robspinかなり遅いと思いますが、おそらく関数にリクエストを挿入していません。例:function(Request $ request)
mushoodbadulla19年

1
私がModelクラスでデータベースの値を次のように宣言しなかったために、なぜあなたの値がデータベースに挿入されないのかを探している人のために:protected $fillable = ['slug'];
fWd82 2010

40

$request->merge($array)Laravel 5.2で機能を試しましたが、完全に機能しています。

例:

$request->merge(["key"=>"value"]);

2
これは完璧な解決策です
JHOAN B.HENRICHE18年

17

この件については十分に述べましたが、私は自分の答えを追加することに抵抗できませんでした。最も簡単なアプローチは

request()->merge([ 'foo' => 'bar' ]);

16

laravel 5.6では、たとえば次のようにミドルウェア間でパラメーターを渡すことができます。

FirstMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    return $next($request->merge(['key' => 'value']));
}

SecondMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    dd($request->all());
}

1
その$request->merge()方法FTW!ありがとう。
マーティンジョイナー2018

15

以下のコードも使用できます

$request->request->set(key, value).

私にぴったりです。


少なくともLaravel5.6では、これがその方法です。素晴らしい答え
Rockin4Life33 2018

4

ex:の新しいパラメータをnewParam現在のRequestオブジェクトに追加するには、次の操作を実行できます。

$newParam = "paramvalue";
$request->request->add(['newParam' => $newParam]);

新しいパラメータを追加した後、次の方法で、この新しく追加されたパラメータをRequestオブジェクトに表示できます。

dd($request);//prints the contents of the Request object

3

私の観察に基づく

$request->request->add(['variable' => 'value']);渡された値があるため、POST、PUT、およびDELETEメソッドで(ほとんど)機能し_tokenます。そのうちの1つはです。以下の例のように。

<form action="{{ route('process', $id) }}" method="POST">
    @csrf
</form>

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}

ただし、[以下のコード]は、渡された値がないため機能しません。実際には追加されません。

<a href='{{ route('process', $id) }}'>PROCESS</a>

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}


GETメソッドを 使用する場合は、Requestを宣言し、それに直接値を割り当てることができます。以下のように:

public function process($id){
    $request = new Request(['id' => $id]);
}

または、を使用できますmerge。これは、すべてのメソッド(GETPOSTPUTDELETE)で機能するリクエスト値を初期化して追加$request->request->add(['variable' => 'value']);できるため、実際には優れています。

public function process(Request $request, $id){
    $request->merge(['id' => $id]);
}

タグ: laravel5.8.11


2

このコードを使用して、リクエストに何かを追加しました。

$req->query->add(['key'=>'variable']);
$req->request->add(['key'=>'variable']);


2

私が使用して調査した中で最も優れているのは、$ request-> merge([])(私のコードを確認してください)です。

    public function index(Request $request) {
        not_permissions_redirect(have_premission(2));
        $filters = (!empty($request->all())) ? true : false;
        $request->merge(['type' => 'admin']);
        $users = $this->service->getAllUsers($request->all());
        $roles = $this->roles->getAllAdminRoles();
        return view('users.list', compact(['users', 'roles', 'filters']));
    }

インデックス関数内の3行目を確認してください。


0

次のようにして、ミドルウェアからのリクエストにパラメータを追加できます。

public function handle($request, Closure $next)
{
    $request->route()->setParameter('foo', 'bar');
    return $next($request);
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.