From eb9316d3a973ddae99b7f21bca6fc52999e9f1ab Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Wed, 14 Nov 2018 17:42:23 +0100 Subject: [PATCH] Add workaround for non PSR-7 compliant headers in SlimPhp --- src/Dispatcher.php | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/Dispatcher.php b/src/Dispatcher.php index 04beb12..43a1dcd 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -2,8 +2,9 @@ namespace IntegerNet\CallbackProxy; -use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; +use Slim\Http\Headers; +use Slim\Http\Request as SlimRequest; /** * Dispatches a request to multiple targets, returns first successful response (HTTP 200) or last response if none are @@ -31,8 +32,24 @@ public function __construct(HttpClient $client, Targets $targets, DispatchStrate $this->strategy = $strategy; } - public function dispatch(RequestInterface $request, ResponseInterface $response, string $action): ResponseInterface + public function dispatch(SlimRequest $request, ResponseInterface $response, string $action): ResponseInterface { + $this->resetHeaderOriginalKeys($request); return $this->strategy->execute($this->client, $this->targets, $request, $response, $action); } + + /** + * Workaround for https://github.com/slimphp/Slim-Psr7/issues/11 + */ + private function resetHeaderOriginalKeys(SlimRequest $request): void + { + $headersProperty = new \ReflectionProperty(SlimRequest::class, 'headers'); + $headersProperty->setAccessible(true); + /** @var Headers $headers */ + $headers = $headersProperty->getValue($request); + foreach ($headers as $key => $header) { + $headers->set($key, $header['value']); + } + $headersProperty->setAccessible(false); + } }