errorHandler = $errorHandler; } /** * Run middleware action * * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callback $next * @return ResponseInterface */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, $next) { if (!is_callable($next)) { throw new \InvalidArgumentException("'next' should be a callback"); } try { $nextResponse = $next($request, $response); $error = null; } catch (\Error $e) { $error = $e; } catch (\Exception $e) { $error = $e; } $this->errorHandler->setError($error); if ($error) { $this->errorHandler->log($error); $nextResponse = $this->errorResponse($request, $response); } return $nextResponse; } /** * Handle caught error * * @param ServerRequestInterface $request * @param ResponseInterface $response * @return ResponseInterface */ protected function errorResponse(ServerRequestInterface $request, ResponseInterface $response) { if ( interface_exists(GlobalEnvironmentInterface::class, false) && $response instanceof GlobalEnvironmentInterface && $response->isStale() ) { $response = $response->revive(); } $errorResponse = $response->withProtocolVersion($request->getProtocolVersion())->withStatus(500); $errorResponse->getBody()->write('An unexpected error occured'); return $errorResponse; } }