Erro: Chamada para método indefinido Illuminate \ Http \ Request :: put ()
Morteza Negahi
put () é um método de coleção, $ request-> all () retorna um array.
Joel Hinz
3
O objeto de solicitação, na verdade, possui os métodos replace () e merge (). Eu geralmente prefiro usar esses. Veja meu comentário na pergunta para uma resposta SO sobre isso.
Joel Hinz
@JoelHinz, achei que eles não funcionassem no Laravel 5, pois vi poucos posts onde os caras tiveram problemas em usar esses métodos. Mas eu olhei para o Requestcódigo-fonte do L5 e posso ver esses métodos. Obrigado.
Alexey Mezenin
4
Sem suor. Sua resposta ainda está errada, no entanto. O método replace () substitui a entrada inteira - você precisa merge () se quiser substituir apenas um valor.
Ótimas respostas aqui, mas eu precisava substituir um valor em uma solicitação JSON. Depois de examinar um pouco o código, encontrei o seguinte código. Me avise se eu estiver fazendo algo idiota.
Tenha cuidado, substitua o método, remova os dados solicitados originais e substitua todos eles por seu array. \ Symfony \ Component \ HttpFoundation \ ParameterBag linha 54 função pública substituir (array $ parâmetros = []) {$ this-> parâmetros = $ parâmetros; }
Oleg
2
Se você usar solicitações personalizadas para validação, para substituir dados para validação ou para definir dados padrão (para caixas de seleção ou outro), use o método de substituição prepareForValidation().
Respostas:
Use
merge()
:$request->merge([ 'user_id' => $modified_user_id_here, ]);
Simples! Não há necessidade de transferir o todo
$request->all()
para outra variável.fonte
Tente:
$requestData = $request->all(); $requestData['img'] = $img;
Outra maneira de fazer isso:
$request->merge(['img' => $img]);
Obrigado a @JoelHinz por isso.
Se você deseja adicionar ou substituir dados aninhados:
$data['some']['thing'] = 'value'; $request->merge($data);
Se você não injetar
Request $request
objeto, você pode usar orequest()
auxiliar global ou\Request::
fachada em vez de$request
fonte
Request
código-fonte do L5 e posso ver esses métodos. Obrigado.Se você precisa personalizar a solicitação
$data = $request->all();
você pode passar o nome do campo e o valor
$data['product_ref_code'] = 1650;
e finalmente passar o novo pedido
$last = Product::create($data);
fonte
Ótimas respostas aqui, mas eu precisava substituir um valor em uma solicitação JSON. Depois de examinar um pouco o código, encontrei o seguinte código. Me avise se eu estiver fazendo algo idiota.
$json = $request->json()->all(); $json['field'] = 'new value'; $request->json()->replace($json);
fonte
Se você precisar atualizar uma propriedade na solicitação, eu recomendo que você use o método replace da classe Request usada pelo Laravel
$request->replace(['property to update' => $newValue]);
fonte
Se você usar solicitações personalizadas para validação, para substituir dados para validação ou para definir dados padrão (para caixas de seleção ou outro), use o método de substituição
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'), ]); } }
Espero que esta informação seja útil para alguém.
fonte
Funciona para mim
$request = new Request(); $request->headers->set('content-type', 'application/json'); $request->initialize(['yourParam' => 2]);
verificar saída
$queryParams = $request->query(); dd($queryParams['yourParam']); // 2
fonte
Use adicionar
$request->request->add(['img' => $img]);
fonte