33 lines
826 B
PHP
33 lines
826 B
PHP
<?php
|
|
namespace Framework\Middleware;
|
|
|
|
use Framework\Router;
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
|
|
class RouterMiddleware {
|
|
|
|
/**
|
|
* @var Router
|
|
*/
|
|
private $router;
|
|
|
|
public function __construct(Router $router)
|
|
{
|
|
$this->router = $router;
|
|
}
|
|
|
|
public function __invoke(ServerRequestInterface $request, callable $next)
|
|
{
|
|
$route = $this->router->match($request);
|
|
if (is_null($route)) {
|
|
return $next($request);
|
|
}
|
|
$params = $route->getParams();
|
|
$request = array_reduce(array_keys($params), function ($request, $key) use ($params) {
|
|
return $request->withAttribute($key, $params[$key]);
|
|
}, $request);
|
|
$request = $request->withAttribute(get_class($route), $route);
|
|
return $next($request);
|
|
}
|
|
|
|
} |