Replaced standard http_build_query by guzzle's build_query, which keeps params with no value

This commit is contained in:
Alejandro Celaya 2020-01-12 10:26:59 +01:00
parent 15a72e2a88
commit c52794aed6
2 changed files with 3 additions and 8 deletions

View file

@ -20,8 +20,8 @@ use Shlinkio\Shlink\Core\Service\VisitsTrackerInterface;
use function array_key_exists; use function array_key_exists;
use function array_merge; use function array_merge;
use function GuzzleHttp\Psr7\build_query;
use function GuzzleHttp\Psr7\parse_query; use function GuzzleHttp\Psr7\parse_query;
use function http_build_query;
abstract class AbstractTrackingAction implements MiddlewareInterface abstract class AbstractTrackingAction implements MiddlewareInterface
{ {
@ -42,12 +42,6 @@ abstract class AbstractTrackingAction implements MiddlewareInterface
$this->logger = $logger ?: new NullLogger(); $this->logger = $logger ?: new NullLogger();
} }
/**
* Process an incoming server request and return a response, optionally delegating
* to the next middleware component to create the response.
*
*
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{ {
$shortCode = $request->getAttribute('shortCode', ''); $shortCode = $request->getAttribute('shortCode', '');
@ -79,7 +73,7 @@ abstract class AbstractTrackingAction implements MiddlewareInterface
} }
$mergedQuery = array_merge($hardcodedQuery, $currentQuery); $mergedQuery = array_merge($hardcodedQuery, $currentQuery);
return (string) $uri->withQuery(http_build_query($mergedQuery)); return (string) $uri->withQuery(build_query($mergedQuery));
} }
abstract protected function createSuccessResp(string $longUrl): ResponseInterface; abstract protected function createSuccessResp(string $longUrl): ResponseInterface;

View file

@ -64,6 +64,7 @@ class RedirectActionTest extends TestCase
{ {
yield ['http://domain.com/foo/bar?some=thing', []]; yield ['http://domain.com/foo/bar?some=thing', []];
yield ['http://domain.com/foo/bar?some=thing', ['foobar' => 'notrack']]; yield ['http://domain.com/foo/bar?some=thing', ['foobar' => 'notrack']];
yield ['http://domain.com/foo/bar?some=thing&else', ['else' => null]];
yield ['http://domain.com/foo/bar?some=thing&foo=bar', ['foo' => 'bar']]; yield ['http://domain.com/foo/bar?some=thing&foo=bar', ['foo' => 'bar']];
yield ['http://domain.com/foo/bar?some=overwritten&foo=bar', ['foo' => 'bar', 'some' => 'overwritten']]; yield ['http://domain.com/foo/bar?some=overwritten&foo=bar', ['foo' => 'bar', 'some' => 'overwritten']];
yield ['http://domain.com/foo/bar?some=overwritten', ['foobar' => 'notrack', 'some' => 'overwritten']]; yield ['http://domain.com/foo/bar?some=overwritten', ['foobar' => 'notrack', 'some' => 'overwritten']];