Jak zmienić wartość parametru żądania w laravel

97

Muszę zmienić wartość mojego parametru żądania w następujący sposób:

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

Używam tego kodu, ale nie działa:

$request->offsetSet('img', $img);
Morteza Negahi
źródło
1
Możliwy duplikat wartości wejściowej Laravel - odpowiedź znajduje się w komentarzu do pytania głównego .
Joel Hinz

Odpowiedzi:

71

Zastosowanie merge():

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

Prosty! Nie ma potrzeby przenoszenia całości $request->all()do innej zmiennej.

doncadavona
źródło
191

Spróbuj:

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

Inny sposób na zrobienie tego:

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

Dzięki @JoelHinz za to.

Jeśli chcesz dodać lub nadpisać zagnieżdżone dane:

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

Jeśli nie wstrzykniesz Request $requestobiektu, możesz użyć globalnego request()pomocnika lub \Request::fasady zamiast$request

Alexey Mezenin
źródło
Błąd: wywołanie niezdefiniowanej metody Illuminate \ Http \ Request :: put ()
Morteza Negahi Kwietnia
1
put () jest metodą kolekcji, $ request-> all () zwraca tablicę.
Joel Hinz
4
Obiekt żądania w rzeczywistości ma metody replace () i merge (). Generalnie wolę ich używać. Zobacz mój komentarz do pytania, aby uzyskać odpowiedź TAK na ten temat.
Joel Hinz
@JoelHinz, myślałem, że nie działają w Laravel 5, ponieważ widziałem kilka postów, w których faceci mieli problem z użyciem tych metod. Ale zajrzałem do Requestkodu źródłowego L5 i widzę te metody. Dzięki.
Alexey Mezenin
5
Bez potu. Twoja odpowiedź jest jednak nadal błędna. Metoda replace () zastępuje całe dane wejściowe - musisz scalić (), jeśli chcesz zamienić tylko jedną wartość.
Joel Hinz
8

Jeśli chcesz dostosować żądanie

$data = $request->all();

możesz podać nazwę pola i wartość

$data['product_ref_code'] = 1650;

i na koniec przekaż nową prośbę

$last = Product::create($data);
Alaa Moneam
źródło
2

Świetne odpowiedzi tutaj, ale musiałem zastąpić wartość w żądaniu JSON. Po małym zagłębieniu się w kod wymyśliłem następujący kod. Daj mi znać, jeśli robię coś głupiego.

$json = $request->json()->all();
$json['field'] = 'new value';
$request->json()->replace($json);
feniks
źródło
2

Jeśli chcesz zaktualizować właściwość w żądaniu, polecam skorzystać z metody replace z klasy Request używanej przez Laravel

$request->replace(['property to update' => $newValue]);
Ja Ouad
źródło
1
Bądź ostrożny, zamień metodę, usuń oryginalne dane żądania i zastąp je całą swoją macierzą. \ Symfony \ Component \ HttpFoundation \ ParameterBag linia 54 public function replace (tablica $ parameters = []) {$ this-> parameters = $ parameters; }
Oleg
2

Jeśli używasz niestandardowych żądań walidacji, zastąpienia danych do walidacji lub ustawienia danych domyślnych (dla pól wyboru lub innych), użyj metody zastępowania 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'),
        ]);
    }
}

Mam nadzieję, że ta informacja komuś się przyda.

Oleg
źródło
1

To działa dla mnie

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

sprawdź wyjście

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
Phuc
źródło
0

Użyj add

$request->request->add(['img' => $img]);
Luís Fernando
źródło
Witam i witam w SO! Chociaż ten kod może odpowiedzieć na pytanie, dostarczenie dodatkowego kontekstu dotyczącego tego, jak i / lub dlaczego rozwiązuje problem, poprawiłoby długoterminową wartość odpowiedzi. Przeczytaj prezentację i jak napisać dobrą odpowiedź?
Tomer Shetah