Home > Software engineering >  How to remove query parameter from url in laravel via middleware?
How to remove query parameter from url in laravel via middleware?

Time:02-17

I am using laravel and I am facing one problem, I have URL like this

https://example.com?version=2.2.0

Now I am creating middleware after matching the version the query parameter should remove. Below is the middleware code

public function handle($request, Closure $next)
    {
        $input = $request->all();
        $request->replace($request->except(['version']));
        return $next($request);
    }

But it is not working to remove query parameters although working post data.

CodePudding user response:

Why don't use just remove method?

public function handle($request, Closure $next)
{
    $input = $request->all();
    $request->remove('version');
    return $next($request);
}

This is what remove method does under the hood, in laravel source code:

/**
 * Removes a parameter.
 */
public function remove(string $key)
{
    unset($this->parameters[$key]);
}

CodePudding user response:

Just unset the query param.

public function handle($request, Closure $next)
{
    if( $request->has('version') ){
        unset($request['version']);
    }
    return $next($request);
}

CodePudding user response:

If i understand correctly you want to remove the ?version=2.2.0 from your url?

You can do this by using this code:

// This only works for GET requests, NOT for POST requests.
if ($request->has('version')) {
        return redirect()->to($request->fullUrlWithoutQuery('version'));
}

return $next($request);
  • Related