Ellrion
6/28/2017 - 9:25 AM

RedirectResponse makros for add or replace uri query parameter

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;
});