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
         }
     }
 }
Exemplo n.º 2
0
 /**
  * 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);
 }