Cómo cambiar el valor de un parámetro de solicitud en laravel


94

Necesito cambiar el valor de mi parámetro de solicitud de esta manera:

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

Utilizo este código pero no funciona:

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

1
Posible duplicado del valor de entrada de cambio de Laravel : la respuesta está en el comentario de la pregunta principal.
Joel Hinz

Respuestas:


61

Utilizar merge():

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

¡Sencillo! No es necesario transferir todo $request->all()a otra variable.


187

Intentar:

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

Otra forma de hacerlo:

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

Gracias a @JoelHinz por esto.

Si desea agregar o sobrescribir datos anidados:

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

Si no inyecta el Request $requestobjeto, puede usar el request()asistente global o la \Request::fachada en lugar de$request


Error: llamada al método no definido Illuminate \ Http \ Request :: put ()
Morteza Negahi

put () es un método de colección, $ request-> all () devuelve una matriz.
Joel Hinz

3
El objeto de solicitud en realidad tiene métodos replace () y merge (). Generalmente prefiero usar esos. Vea mi comentario sobre la pregunta para obtener una respuesta SO sobre eso.
Joel Hinz

@JoelHinz, pensé que no funcionan en Laravel 5, porque vi algunas publicaciones donde los chicos tenían problemas con el uso de estos métodos. Pero he examinado el Requestcódigo fuente de L5 y puedo ver estos métodos. Gracias.
Alexey Mezenin

4
Sin sudar. Sin embargo, tu respuesta sigue siendo incorrecta. El método replace () reemplaza toda la entrada; debe fusionar () si solo desea reemplazar un valor.
Joel Hinz

8

Si necesita personalizar la solicitud

$data = $request->all();

puedes pasar el nombre del campo y el valor

$data['product_ref_code'] = 1650;

y finalmente pasar la nueva solicitud

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

3

Si necesita actualizar una propiedad en la solicitud, le recomiendo que use el método de reemplazo de la clase Request que usa Laravel

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

1
Tenga cuidado, reemplace el método, elimine los datos solicitados originales y reemplácelos todos por su matriz. \ Symfony \ Component \ HttpFoundation \ ParameterBag línea 54 función pública reemplazar (matriz $ parámetros = []) {$ esto-> parámetros = $ parámetros; }
Oleg

2

Excelentes respuestas aquí, pero necesitaba reemplazar un valor en una solicitud JSON. Después de indagar un poco en el código, se me ocurrió el siguiente código. Avísame si estoy haciendo algo tonto.

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

2

Si usa solicitudes personalizadas para la validación, para reemplazar datos para la validación o para establecer datos predeterminados (para casillas de verificación u otros), use el método de anulación 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 información le sea útil a alguien.


1

Funciona para mi

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

comprobar salida

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.