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ść.
Ś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.
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().
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ź?
Odpowiedzi:
Zastosowanie
merge()
:$request->merge([ 'user_id' => $modified_user_id_here, ]);
Prosty! Nie ma potrzeby przenoszenia całości
$request->all()
do innej zmiennej.źródło
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 $request
obiektu, możesz użyć globalnegorequest()
pomocnika lub\Request::
fasady zamiast$request
źródło
Request
kodu źródłowego L5 i widzę te metody. Dzięki.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);
źródło
Ś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);
źródło
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]);
źródło
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.
źródło
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
źródło
Użyj add
$request->request->add(['img' => $img]);
źródło