Morteza Negahi
Morteza Negahi

Reputation: 3483

How to change value of a request parameter in laravel

I need to change value of my request parameter like this:

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

I use this code but does not work:

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

Upvotes: 168

Views: 244469

Answers (11)

Essaadani Younes
Essaadani Younes

Reputation: 1

in case of updating an item of object you can write the lines bellow

$Obj = $request->data;
$Obj['item'] = value;

Upvotes: 0

doncadavona
doncadavona

Reputation: 7760

Use merge():

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

Simple! No need to transfer the entire $request->all() to another variable.

Read more about Laravel's merge() here:

https://laravel.com/docs/collections#method-merge

Upvotes: 208

Isuru Dilshan
Isuru Dilshan

Reputation: 819

Also, make sure to update the model class.

Item 
{
    fillable=[
        'img',
        ... // other attributes
    ];
}

Upvotes: 0

Waseem Alhabash
Waseem Alhabash

Reputation: 511

Try that :

$request["name"] = "My New Value";
$request["img"]  = $img;

It's worked in Laravel 8.

Upvotes: 1

Luís Fernando
Luís Fernando

Reputation: 101

Use add

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

Upvotes: 10

Oleh Diachenko
Oleh Diachenko

Reputation: 662

If you use custom requests for validation, for replace data for validation, or to set default data (for checkboxes or other) use override method 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'),
        ]);
    }
}

I hope this information will be useful to somebody.

Upvotes: 4

Jaouad Ballat
Jaouad Ballat

Reputation: 135

If you need to update a property in the request, I recommend you to use the replace method from Request class used by Laravel

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

Upvotes: 11

kirilclicks
kirilclicks

Reputation: 1677

Great answers here but I needed to replace a value in a JSON request. After a little digging into the code, I came up with the following code. Let me know if I'm doing something dumb.

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

Upvotes: 2

Phuc
Phuc

Reputation: 21

It work for me

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

check output

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2

Upvotes: 2

Alaa Moneam
Alaa Moneam

Reputation: 527

If you need to customize the request

$data = $request->all();

you can pass the name of the field and the value

$data['product_ref_code'] = 1650;

and finally pass the new request

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

Upvotes: 11

Alexey Mezenin
Alexey Mezenin

Reputation: 163758

Try to:

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

Another way to do it:

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

Thanks to @JoelHinz for this.

If you want to add or overwrite nested data:

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

If you do not inject Request $request object, you can use the global request() helper or \Request:: facade instead of $request

Upvotes: 268

Related Questions