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 } } }
/** * Ask the resource represented by this RequestDispatcher to process * the associated request, and create (or append to) the associated response. * * @param \Symfony\Component\HttpFoundation\Request $request The servlet request we are * processing * @param \Symfony\Component\HttpFoundation\Response $response The servlet response we are * creating * @todo Manage exception if the resource doesn't exist. */ protected function invoke(\Symfony\Component\HttpFoundation\Request $request, \Symfony\Component\HttpFoundation\Response $response) { $requestURI = urldecode($this->requestURI); $urls = @parse_url($requestURI); if (array_key_exists('query', $urls)) { parse_str($urls['query'], $_GET); } $path = $this->context->getRealPath($urls['path']); $_REQUEST = array_merge($_GET, $_POST, $_COOKIE); $fileExists = @fopen($path, 'r', true); if (!$fileExists) { $this->{$log}->error('Resource ' . $path . ' is not found'); throw new \Serphlet\Exception\UnavailableException('The resource is currently unavailable'); } else { fclose($fileExists); } if ($response->getAutoflush()) { require $path; } else { ob_start(); require $path; $response->write(ob_get_contents()); ob_end_clean(); } }