public static function commit(\Symfony\Component\HttpFoundation\Request $request, \Symfony\Component\HttpFoundation\Response $response, \Serphlet\Config\ServletContext $context) { // Determine the type $statusCode = $response->getStatus(); $exception = $request->getAttribute(\Serphlet\Globals::EXCEPTION_ATTR); // Consider only getting involved if the response is marked as an error if (!$response->isError()) { return; } // Handle the status if (!$response->isCommitted()) { $response->resetBuffer(); if ($statusCode >= 400) { $request->setAttribute(\Serphlet\Globals::EXCEPTION_PAGE_ATTR, $request->getRequestURI()); $request->setAttribute(\Serphlet\Globals::STATUS_CODE_ATTR, $statusCode); $errorMessage = $request->getAttribute(\Serphlet\Globals::ERROR_MESSAGE_ATTR); if (!trim($errorMessage)) { $request->setAttribute(\Serphlet\Globals::ERROR_MESSAGE_ATTR, $response->getMessage()); } $errorPage = $context->findErrorPage($statusCode); if (!empty($errorPage)) { self::serveErrorPage($request, $response, $context, $errorPage); } else { self::serveDefaultErrorPage($request, $response, $context); } } else { // Errors below this status don't have response contents } } }
/** * Forward this request and response to another resource for processing. * * @param \Symfony\Component\HttpFoundation\Request $request The servlet request to be * forwarded * @param \Symfony\Component\HttpFoundation\Response $response The servlet response to be * forwarded */ public function doForward(\Symfony\Component\HttpFoundation\Request $request, \Symfony\Component\HttpFoundation\Response $response) { // Reset any output that has been buffered, but keep headers/cookies if ($response->isCommitted()) { if (!empty($this->log)) { $this->log->error('Forward on committed response'); } throw new \Serphlet\Exception\IllegalStateException('Cannot forward after response has been committed'); } $response->resetBuffer(); $this->invoke($request, $response); \Serphlet\Application\RequestDispatcherForward::commit($request, $response, $this->context); }