1 | <?php |
||
2 | declare(strict_types=1); |
||
3 | |||
4 | namespace Nip\Router\Middleware; |
||
5 | |||
6 | use Nip\Http\ServerMiddleware\Middlewares\ServerMiddlewareInterface; |
||
7 | use Nip\Request; |
||
8 | use Nip\Router\RequestContext; |
||
9 | use Nip\Router\Router; |
||
10 | use Psr\Http\Message\ResponseInterface; |
||
11 | use Psr\Http\Message\ServerRequestInterface; |
||
12 | use Psr\Http\Server\RequestHandlerInterface; |
||
13 | |||
14 | /** |
||
15 | * Class StartSession |
||
16 | * @package Nip\Session\Middleware |
||
17 | */ |
||
18 | class RouteResolverMiddleware implements ServerMiddlewareInterface |
||
19 | { |
||
20 | |||
21 | /** |
||
22 | * The session manager. |
||
23 | * |
||
24 | * @var Router |
||
25 | */ |
||
26 | protected $router; |
||
27 | |||
28 | /** |
||
29 | * Create a new session middleware. |
||
30 | * |
||
31 | * @param Router $router |
||
32 | 1 | */ |
|
33 | public function __construct(Router $router) |
||
34 | 1 | { |
|
35 | 1 | $this->router = $router; |
|
36 | } |
||
37 | |||
38 | /** |
||
39 | * @inheritdoc |
||
40 | * @param Request $request |
||
41 | 1 | */ |
|
42 | public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface |
||
43 | 1 | { |
|
44 | 1 | $this->getRouter()->setContext((new RequestContext())->fromRequest($request)); |
|
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||
45 | 1 | $return = $this->getRouter()->matchRequest($request); |
|
46 | if (is_array($return) && isset($return['_route'])) { |
||
47 | $this->populateRequest($request, $return); |
||
48 | } |
||
49 | 1 | ||
50 | return $handler->handle($request); |
||
51 | } |
||
52 | |||
53 | /** |
||
54 | * @param Request $request |
||
55 | * @param $params |
||
56 | */ |
||
57 | protected function populateRequest($request, $params) |
||
58 | { |
||
59 | foreach ($params as $param => $value) { |
||
60 | switch ($param) { |
||
61 | case 'module': |
||
62 | $request->setModuleName($value); |
||
63 | break; |
||
64 | case 'controller': |
||
65 | $request->setControllerName($value); |
||
66 | break; |
||
67 | case 'action': |
||
68 | $request->setActionName($value); |
||
69 | break; |
||
70 | default: |
||
71 | $request->attributes->set($param, $value); |
||
72 | break; |
||
73 | } |
||
74 | } |
||
75 | } |
||
76 | |||
77 | /** |
||
78 | * @return Router |
||
79 | 1 | */ |
|
80 | public function getRouter(): Router |
||
81 | 1 | { |
|
82 | return $this->router; |
||
83 | } |
||
84 | } |
||
85 |