public function __invoke(Context $context) { $routeInfo = $context['routeInfo']; if (isset($routeInfo)) { switch ($routeInfo[0]) { case Dispatcher::FOUND: $context->withStatus(200); foreach ($routeInfo[2] as $k => $v) { $context[$k] = urldecode($v); } $result = $routeInfo[1]($context); if ($result) { $context->withState($result); } break; case Dispatcher::METHOD_NOT_ALLOWED: $context->throwError(405); break; } } else { $routeBundle = $context['routeBundle']; if (isset($routeBundle)) { $context->shift($routeBundle['uri']); $routeBundle->getHandler()->dispatch($context); $context->unshift($routeBundle['uri']); } } }