Come modificare il valore di un parametro di richiesta in laravel


94

Devo cambiare il valore del mio parametro di richiesta in questo modo:

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

Uso questo codice ma non funziona:

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

1
Possibile duplicato del valore di input della modifica di Laravel : la risposta è nel commento alla domanda principale.
Joel Hinz

Risposte:


61

Usa merge():

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

Semplice! Non è necessario trasferire l'intero $request->all()su un'altra variabile.


187

Prova a:

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

Un altro modo per farlo:

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

Grazie a @JoelHinz per questo.

Se desideri aggiungere o sovrascrivere i dati nidificati:

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

Se non inserisci un Request $requestoggetto, puoi usare l' request()helper globale o la \Request::facciata invece di$request


Errore: chiamata a un metodo non definito Illuminate \ Http \ Request :: put ()
Morteza Negahi

put () è un metodo di raccolta, $ request-> all () restituisce un array.
Joel Hinz

3
L'oggetto richiesta ha effettivamente i metodi replace () e merge (). In genere preferisco usare quelli. Vedi il mio commento sulla domanda per una risposta SO al riguardo.
Joel Hinz

@ JoelHinz, pensavo che non funzionassero in Laravel 5, perché ho visto pochi post in cui i ragazzi avevano problemi con l'utilizzo di questi metodi. Ma ho esaminato il Requestcodice sorgente di L5 e posso vedere questi metodi. Grazie.
Alexey Mezenin

4
Niente sudore. La tua risposta è ancora sbagliata, però. Il metodo replace () sostituisce l'intero input: è necessario unire () se si desidera sostituire solo un valore.
Joel Hinz

8

Se hai bisogno di personalizzare la richiesta

$data = $request->all();

puoi passare il nome del campo e il valore

$data['product_ref_code'] = 1650;

e infine passare la nuova richiesta

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

3

Se devi aggiornare una proprietà nella richiesta, ti consiglio di utilizzare il metodo di sostituzione dalla classe Request usata da Laravel

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

1
Fai attenzione, sostituisci il metodo, rimuovi i dati della richiesta originale e sostituiscili con il tuo array. \ Symfony \ Component \ HttpFoundation \ ParameterBag riga 54 public function replace (array $ parameters = []) {$ this-> parameters = $ parameters; }
Oleg

2

Ottime risposte qui, ma avevo bisogno di sostituire un valore in una richiesta JSON. Dopo aver scavato un po 'nel codice, ho trovato il seguente codice. Fammi sapere se sto facendo qualcosa di stupido.

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

2

Se si utilizzano richieste personalizzate per la convalida, per sostituire i dati per la convalida o per impostare i dati predefiniti (per caselle di controllo o altro), utilizzare il metodo di sostituzione 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'),
        ]);
    }
}

Spero che queste informazioni siano utili a qualcuno.


1

Funziona per me

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

controllare l'output

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.