RedirectResponse makros for add or replace uri query parameter
<?php
if ( ! function_exists('build_url'))
{
/**
* @param array $parts
* @return string
*/
function build_url(array $parts)
{
$scheme = isset($parts['scheme']) ? $parts['scheme'] . '://' : '';
$host = $parts['host'] ?? '';
$port = isset($parts['port']) ? ':' . $parts['port'] : '';
$user = $parts['user'] ?? '';
$pass = isset($parts['pass']) ? ':' . $parts['pass'] : '';
$pass = ($user || $pass) ? "$pass@" : '';
$path = $parts['path'] ?? '';
$query = isset($parts['query']) ? '?' . $parts['query'] : '';
$fragment = isset($parts['fragment']) ? '#' . $parts['fragment'] : '';
return "$scheme$user$pass$host$port$path$query$fragment";
}
}
<?php
//in some method
return redirect()->back()->withParameters(['foo' => 'bar'])
<?php
//in boot method
RedirectResponse::macro('withParameters', function ($parameters) {
$url = parse_url($this->getTargetUrl());
parse_str($url['query'] ?? '', $query);
$url['query'] = http_build_query(array_merge($query, $parameters));
$this->setTargetUrl(build_url($url));
return $this;
});