Como alterar o valor de um parâmetro de solicitação no laravel

96

Preciso alterar o valor do meu parâmetro de solicitação assim:

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

Eu uso este código, mas não funciona:

$request->offsetSet('img', $img);
Morteza Negahi
fonte
1
Possível duplicata do valor de entrada de alteração do Laravel - a resposta está no comentário à pergunta principal.
Joel Hinz

Respostas:

71

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.

Doncadavona
fonte
190

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 $requestobjeto, você pode usar o request()auxiliar global ou \Request::fachada em vez de$request

Alexey Mezenin
fonte
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.
Joel Hinz
8

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);
Alaa Moneam
fonte
2

Ó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);
Fénix
fonte
2

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]);
Ja Ouad
fonte
1
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().

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.

Oleg
fonte
1

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
Phuc
fonte
0

Use adicionar

$request->request->add(['img' => $img]);
Luís fernando
fonte