/**
  * Send the response
  *
  * This method is overridden, it's purpose is to disable the exit call and instead
  * just return the error level for unit testing
  *
  * @param SendResponseEvent $event
  * @return int
  */
 public function __invoke(SendResponseEvent $event)
 {
     $response = $event->getResponse();
     if ($response instanceof Response) {
         $this->sendContent($event);
         $errorLevel = (int) $response->getMetadata('errorLevel', 0);
         $event->stopPropagation(true);
         return $errorLevel;
     }
 }
 /**
  * Send php environment response
  *
  * @param  SendResponseEvent $event
  * @return PhpEnvironmentResponseSender
  */
 public function __invoke(SendResponseEvent $event)
 {
     $response = $event->getResponse();
     if (!$response instanceof Response) {
         return $this;
     }
     $this->sendHeaders($event)->sendContent($event);
     $event->stopPropagation(true);
     return $this;
 }
 /**
  * @param SendResponseEvent $event
  * @return $this
  */
 public function __invoke(SendResponseEvent $event)
 {
     $response = $event->getResponse();
     if (!class_exists('tidy') || !$response instanceof Response || $response->getHeaders()->count() > 0 || $this->xmlHttpRequest) {
         return $this;
     }
     $this->sendHeaders($event)->sendContent($event);
     $event->stopPropagation(true);
     return $this;
 }
 /**
  * Send HTTP headers
  *
  * @param  SendResponseEvent $event
  * @return self
  */
 public function sendHeaders(SendResponseEvent $event)
 {
     if (headers_sent() || $event->headersSent()) {
         return $this;
     }
     $response = $event->getResponse();
     foreach ($response->getHeaders() as $header) {
         if ($header instanceof MultipleHeaderInterface) {
             header($header->toString(), false);
             continue;
         }
         header($header->toString());
     }
     $status = $response->renderStatusLine();
     header($status);
     $event->setHeadersSent();
     return $this;
 }
 /**
  * Send HTTP response headers
  *
  * If an application response is composed, and is an HTTP response, merges
  * its headers with the ApiProblemResponse headers prior to sending them.
  *
  * @param  SendResponseEvent $e
  * @return self
  *
  * @throws \Zend\Http\Exception\InvalidArgumentException
  */
 public function sendHeaders(SendResponseEvent $e)
 {
     $response = $e->getResponse();
     if (!$response instanceof ApiProblemResponse) {
         return $this;
     }
     /** @var Request $request */
     $request = $this->getMvcEvent()->getRequest();
     /** @var Accept $accept */
     $accept = $request->getHeader('Accept');
     if ($accept instanceof Accept && $accept->hasMediaType('text/xml')) {
         $headers = $response->getHeaders();
         if ($headers->has('content-type')) {
             $contentTypeHeader = $headers->get('content-type');
             $headers->removeHeader($contentTypeHeader);
         }
         $headers->addHeaderLine('content-type', 'text/xml');
         if ($this->applicationResponse instanceof HttpResponse) {
             $this->mergeHeaders($this->applicationResponse, $response);
         }
     }
     return parent::sendHeaders($e);
 }