/** * @param callable[] $middleware * @param callable $last * @return callable */ private function getNext(array $middleware, callable $last) { return function (ServerRequestInterface $request, ResponseInterface $response) use($middleware, $last) { if (!$request instanceof ActionRequest) { $request = new ActionRequest($request); } $this->request = $request; if (count($middleware)) { $next = array_shift($middleware); $response = $next($request, $response, $this->getNext($middleware, $last)); if (!$response instanceof ResponseInterface) { throw new InvalidResponseException('Invalid response returned from: ' . \Jivoo\Utilities::callableToString($next)); } return $response; } $response = $last($request, $response); if (!$response instanceof ResponseInterface) { throw new InvalidResponseException('Invalid response returned from: ' . \Jivoo\Utilities::callableToString($last)); } return $response; }; }