RouteHandler::resolveArguments()   A
last analyzed

Complexity

Conditions 6
Paths 6

Size

Total Lines 16
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 6.0493

Importance

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