Laravel change input value

PhpInputLaravel 4

Php Problem Overview


In laravel, we can get the input value via Input::get('inputname'). I try to change the value by doing this Input::get('inputname') = "new value";. But then, I get the error message saying Can't use function return value in write context.

Is it possible for us change the input value so that when later calling on Input::get('inputname') will get the new amended value?

Thanks.

Php Solutions


Solution 1 - Php

You can use Input::merge() to replace single items.

Input::merge(['inputname' => 'new value']);

Or use Input::replace() to replace the entire input array.

Input::replace(['inputname' => 'new value']);

Here's a link to the documentation

Solution 2 - Php

If you're looking to do this in Laravel 5, you can use the merge() method from the Request class:

class SomeController extends Controller
{
    public function someAction( Request $request ) {

        // Split a bunch of email addresses
        // submitted from a textarea form input
        // into an array, and replace the input email
        // with this array, instead of the original string.
        if ( !empty( $request->input( 'emails' ) ) ) {

            $emails = $request->input( 'emails' );
            $emails = preg_replace( '/\s+/m', ',', $emails );
            $emails = explode( ',', $emails );

            // THIS IS KEY!
            // Replacing the old input string with
            // with an array of emails.
            $request->merge( array( 'emails' => $emails ) );
        }

        // Some default validation rules.
        $rules = array();

        // Create validator object.
        $validator = Validator::make( $request->all(), $rules );

        // Validation rules for each email in the array.
        $validator->each( 'emails', ['required', 'email', 'min: 6', 'max: 254'] );

        if ( $validator->fails() ) {
            return back()->withErrors($validator)->withInput();
        } else {
            // Input validated successfully, proceed further.
        }
    }
}

Solution 3 - Php

If you mean you want to overwrite input data, you can try doing:

Input::merge(array('somedata' => 'SomeNewData'));

Solution 4 - Php

Try this,it will help you.

$request->merge(array('someIndex' => "yourValueHere"));

Solution 5 - Php

I also found this problem, I can solve it with the following code:

public function(Request $request)
{
    $request['inputname'] = 'newValue';
}

Regards

Solution 6 - Php

I'm using Laravel 8. The following is working for me: $request->attributes->set('name', 'Value');

Solution 7 - Php

I used Raham's answer to solve my problem. However, it was nesting the updated data within an array, when I needed it at the same level as other data. I used:

$request->merge('someIndex' => "yourValueHere");

A note other Laravel newbies, I used the merge method to account for an empty checkbox value in a Laravel 7 update form. A deselected checkbox on an update form doesn't return 0, it doesn't set any value in the update request. As a result that value is unchanged in the database. You have to check for a set value and merge a new value if nothing exists. Hope that helps someone.

Just a quick update. If the user doesn't check a box and I need to enter a value in the DB I do something like this in my controller:

	if(empty($request->input('checkbox_value'))) {
		$request->merge(['checkbox_value' => 0]);
	}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1995781View Question on Stackoverflow
Solution 1 - PhpBradView Answer on Stackoverflow
Solution 2 - PhpArman HView Answer on Stackoverflow
Solution 3 - PhpSudhir BastakotiView Answer on Stackoverflow
Solution 4 - PhpRahamView Answer on Stackoverflow
Solution 5 - PhpanayarojoView Answer on Stackoverflow
Solution 6 - PhpKethView Answer on Stackoverflow
Solution 7 - PhpslippastView Answer on Stackoverflow