From aa50bd7151faf6372808fb8eb05c7d9f85617a28 Mon Sep 17 00:00:00 2001 From: Graham Campbell Date: Sun, 21 Mar 2021 14:44:42 +0000 Subject: [PATCH] Fix `Utils::modifyRequest` dropping `ServerRequest` attributes (#400) Fixes #344 Co-Authored-By: Imad Bazzal <12641890+ImadBazzal@users.noreply.github.com> Co-authored-by: Imad Bazzal <12641890+ImadBazzal@users.noreply.github.com> --- src/Utils.php | 8 +++++++- tests/UtilsTest.php | 11 +++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Utils.php b/src/Utils.php index 5f780710..7c7cc3eb 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -203,7 +203,7 @@ public static function modifyRequest(RequestInterface $request, array $changes) } if ($request instanceof ServerRequestInterface) { - return (new ServerRequest( + $new = (new ServerRequest( isset($changes['method']) ? $changes['method'] : $request->getMethod(), $uri, $headers, @@ -217,6 +217,12 @@ public static function modifyRequest(RequestInterface $request, array $changes) ->withQueryParams($request->getQueryParams()) ->withCookieParams($request->getCookieParams()) ->withUploadedFiles($request->getUploadedFiles()); + + foreach ($request->getAttributes() as $key => $value) { + $new = $new->withAttribute($key, $value); + } + + return $new; } return new Request( diff --git a/tests/UtilsTest.php b/tests/UtilsTest.php index 799260af..4f62e3a3 100644 --- a/tests/UtilsTest.php +++ b/tests/UtilsTest.php @@ -455,4 +455,15 @@ public function testModifyServerRequestQueryParams() self::assertSame(['name' => 'value'], $modifiedRequest->getQueryParams()); } + + public function testModifyServerRequestRetainsAttributes() + { + $request = (new Psr7\ServerRequest('GET', 'http://example.com/bla')) + ->withAttribute('foo', 'bar'); + + /** @var Psr7\ServerRequest $modifiedRequest */ + $modifiedRequest = Psr7\Utils::modifyRequest($request, []); + + self::assertSame(['foo' => 'bar'], $modifiedRequest->getAttributes()); + } }