Test Failed
Push — master ( a25a4c...498f08 )
by Divine Niiquaye
13:17
created

RouteHandler::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 2
eloc 6
c 2
b 0
f 0
nc 2
nop 1
dl 0
loc 12
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of DivineNii opensource projects.
7
 *
8
 * PHP version 7.4 and above required
9
 *
10
 * @author    Divine Niiquaye Ibok <[email protected]>
11
 * @copyright 2019 DivineNii (https://divinenii.com/)
12
 * @license   https://opensource.org/licenses/BSD-3-Clause License
13
 *
14
 * For the full copyright and license information, please view the LICENSE
15
 * file that was distributed with this source code.
16
 */
17
18
namespace Rade\Handler;
19
20
use Flight\Routing\Handlers\RouteHandler as BaseRouteHandler;
21
use Flight\Routing\Route;
22
use Psr\Http\Message\ServerRequestInterface;
23
use Rade\Application;
24
use Rade\DI\Container;
25
use Rade\Event\ControllerEvent;
26
27
/**
28
 * Default route's handler for rade framework.
29
 *
30
 * @author Divine Niiquaye Ibok <[email protected]>
31
 */
32
class RouteHandler extends BaseRouteHandler
33
{
34
    public function __construct(Container $container)
35
    {
36
        if ($container instanceof Application) {
37
            $handlerResolver = function ($handler, array $parameters) use ($container) {
38
                $event = new ControllerEvent($container, $handler, $parameters, $parameters[ServerRequestInterface::class]);
39
                $container->getDispatcher()->dispatch($event);
40
41
                return $container->getResolver()->resolve($event->getController(), $event->getArguments());
42
            };
43
        }
44
45
        parent::__construct($container->get('psr17.factory'), $handlerResolver ?? [$container->getResolver(), 'resolve']);
46
    }
47
48
    /**
49
     * {@inheritdoc}
50
     */
51
    protected function resolveArguments(ServerRequestInterface $request, Route $route): array
52
    {
53
        $parameters = $route->getArguments();
54
        $parameters[\get_class($request)] = $request;
55
56
        foreach (\class_implements($request) as $psr7Interface) {
57
            if (\Stringable::class === $psr7Interface) {
58
                continue;
59
            }
60
61
            $parameters[$psr7Interface] = $request;
62
        }
63
64
        return $parameters;
65
    }
66
}
67