So ändern Sie den Wert eines Anforderungsparameters in Laravel


89

Ich muss den Wert meines Anforderungsparameters wie folgt ändern:

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

Ich benutze diesen Code, funktioniert aber nicht:

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

1
Mögliches Duplikat des Laravel-Änderungs-Eingabewerts - die Antwort finden Sie im Kommentar zur obersten Frage.
Joel Hinz

Antworten:


45

Verwendung merge():

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

Einfach! Es ist nicht erforderlich, das Ganze $request->all()in eine andere Variable zu übertragen.


184

Versuchen zu:

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

Ein anderer Weg, es zu tun:

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

Danke an @JoelHinz dafür.

Wenn Sie verschachtelte Daten hinzufügen oder überschreiben möchten:

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

Wenn Sie kein Request $requestObjekt injizieren , können Sie stattdessen den globalen request()Helfer oder die \Request::Fassade verwenden$request


Fehler: Aufruf der undefinierten Methode Illuminate \ Http \ Request :: put ()
Morteza Negahi

put () ist eine Erfassungsmethode, $ request-> all () gibt ein Array zurück.
Joel Hinz

3
Das Anforderungsobjekt verfügt tatsächlich über die Methoden replace () und merge (). Im Allgemeinen bevorzuge ich diese. In meinem Kommentar zur Frage finden Sie eine SO-Antwort dazu.
Joel Hinz

@JoelHinz, ich dachte, dass sie in Laravel 5 nicht funktionieren, weil ich nur wenige Posts gesehen habe, in denen Jungs Probleme mit der Verwendung dieser Methoden hatten. Aber ich habe mir den RequestQuellcode von L5 angesehen und kann diese Methoden sehen. Vielen Dank.
Alexey Mezenin

4
Kein Schweiß. Ihre Antwort ist jedoch immer noch falsch. Die Methode replace () ersetzt die gesamte Eingabe. Sie müssen merge () verwenden, wenn Sie nur einen Wert ersetzen möchten.
Joel Hinz

7

Wenn Sie die Anfrage anpassen müssen

$data = $request->all();

Sie können den Namen des Feldes und den Wert übergeben

$data['product_ref_code'] = 1650;

und schließlich die neue Anfrage weitergeben

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

2

Wenn Sie benutzerdefinierte Anforderungen zur Validierung, zum Ersetzen von Daten zur Validierung oder zum Festlegen von Standarddaten (für Kontrollkästchen oder andere) verwenden, verwenden Sie die Überschreibungsmethode 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'),
        ]);
    }
}

Ich hoffe, diese Informationen werden jemandem nützlich sein.


1

Es funktioniert für mich

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

Ausgabe überprüfen

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

1

Tolle Antworten hier, aber ich musste einen Wert in einer JSON-Anfrage ersetzen. Nachdem ich mich ein wenig mit dem Code befasst hatte, kam ich auf den folgenden Code. Lass es mich wissen, wenn ich etwas Dummes mache.

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

1

Wenn Sie eine Eigenschaft in der Anforderung aktualisieren müssen, empfehle ich Ihnen, die von Laravel verwendete Ersetzungsmethode aus der Anforderungsklasse zu verwenden

$request->replace(['property to update' => $newValue]);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.