Completed
Push — master ( 00ed35...63fbb3 )
by Oscar
10:20
created

FastRoute::router()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 6
rs 9.4286
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
namespace Psr7Middlewares\Middleware;
4
5
use Psr7Middlewares\Utils;
6
use Psr\Http\Message\ServerRequestInterface;
7
use Psr\Http\Message\ResponseInterface;
8
use FastRoute\Dispatcher;
9
10
class FastRoute
11
{
12
    use Utils\CallableTrait;
13
14
    /**
15
     * @var Dispatcher FastRoute dispatcher
16
     */
17
    private $router;
18
19
    /**
20
     * Set the Dispatcher instance.
21
     *
22
     * @param Dispatcher|null $router
23
     */
24
    public function __construct(Dispatcher $router)
25
    {
26
        $this->router = $router;
27
    }
28
29
    /**
30
     * Execute the middleware.
31
     *
32
     * @param ServerRequestInterface $request
33
     * @param ResponseInterface      $response
34
     * @param callable               $next
35
     *
36
     * @return ResponseInterface
37
     */
38
    public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
39
    {
40
        $route = $this->router->dispatch($request->getMethod(), $request->getUri()->getPath());
41
42
        if ($route[0] === Dispatcher::NOT_FOUND) {
43
            return $response->withStatus(404);
44
        }
45
46
        if ($route[0] === Dispatcher::METHOD_NOT_ALLOWED) {
47
            return $response->withStatus(405);
48
        }
49
50
        foreach ($route[2] as $name => $value) {
51
            $request = $request->withAttribute($name, $value);
52
        }
53
54
        $response = $this->executeCallable($route[1], $request, $response);
55
56
        return $next($request, $response);
57
    }
58
}
59