Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
ZmsSlimRequest
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
3 / 3
5
100.00% covered (success)
100.00%
1 / 1
 __invoke
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 getDecoratedRequest
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
1
 addAttributes
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3/**
4 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
5 **/
6
7declare(strict_types=1);
8
9namespace BO\Slim\Middleware;
10
11use BO\Slim\Headers;
12use Psr\Http\Message\ResponseInterface;
13use Psr\Http\Message\ServerRequestInterface as Request;
14use Psr\Http\Server\RequestHandlerInterface;
15
16class ZmsSlimRequest
17{
18    /**
19     * @param Request $request
20     * @param RequestHandlerInterface $next
21     * @return ResponseInterface
22     */
23    public function __invoke(Request $request, RequestHandlerInterface $next): ResponseInterface
24    {
25        $decoratedRequest = $request;
26
27        if (!$request instanceof \BO\Slim\Request) {
28            $decoratedRequest = static::getDecoratedRequest($request);
29        }
30
31        return $next->handle($decoratedRequest);
32    }
33
34    public static function getDecoratedRequest(Request $request)
35    {
36        $zmsSlimRequest = new \BO\Slim\Request(
37            $request->getMethod(),
38            $request->getUri(),
39            new Headers($request->getHeaders()),
40            $request->getCookieParams(),
41            $request->getServerParams(),
42            $request->getBody(),
43            $request->getUploadedFiles()
44        );
45
46        $decoratedRequest = static::addAttributes(
47            $zmsSlimRequest->withParsedBody($request->getParsedBody()),
48            $request->getAttributes()
49        );
50        return $decoratedRequest;
51    }
52
53    protected static function addAttributes(\BO\Slim\Request $request, array $attributes): \BO\Slim\Request
54    {
55        if (count($attributes) === 0) {
56            return $request;
57        }
58
59        return static::addAttributes(
60            $request->withAttribute(array_key_first($attributes), array_shift($attributes)),
61            $attributes
62        );
63    }
64}