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);
Morteza Negahi
fuente
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.

doncadavona
fuente
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

Alexey Mezenin
fuente
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);
Alaa Moneam
fuente
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]);
Ja Ouad
fuente
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);
fénix
fuente
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.

Oleg
fuente
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
Phuc
fuente