public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
{
$matcher = $this->router->getMatcher();
$route = $matcher->match($request);
if (!$route) {
$failedRoute = $matcher->getFailedRoute();
switch ($failedRoute->failedRule) {
case 'Aura\\Router\\Rule\\Allows':
return $response->withStatus(405);
// 405 METHOD NOT ALLOWED
// 405 METHOD NOT ALLOWED
case 'Aura\\Router\\Rule\\Accepts':
return $response->withStatus(406);
// 406 NOT ACCEPTABLE
// 406 NOT ACCEPTABLE
default:
return $response->withStatus(404);
// 404 NOT FOUND
}
}
$request = self::setAttribute($request, self::KEY, $route);
foreach ($route->attributes as $name => $value) {
$request = $request->withAttribute($name, $value);
}
$response = $this->executeCallable($route->handler, $request, $response);
return $next($request, $response);
}