Example #1
0
 /**
  * @param MultiInfoEvent $e
  */
 public function handleMultiInfoEvent(MultiInfoEvent $e)
 {
     $r = $e->getRequest();
     foreach ($this->services as $key => $value) {
         if ($value[1][0] === $r) {
             break;
         }
     }
     $requestType = HttpKernelInterface::SUB_REQUEST;
     $stmt = $value[0];
     $request = $stmt->getRequest();
     list($curlRequest, $contentCollector, $headersCollector) = $value[1];
     $this->updateRequestHeadersFromCurlInfos($request, $e->getRequest()->getInfo());
     if (!$headersCollector->getCode()) {
         /*
          * Here we need to use return code from multi event because curl_errno return invalid results
          */
         $error = new CurlTransportException(curl_error($curlRequest->getHandle()), $e->getInfo()->getResult());
         $error = $error->transformToGenericTransportException();
         $stmt->setError($error);
         $event = new Event\GetResponseForExceptionEvent($this, $request, $requestType, $error);
         $this->getEventDispatcher()->dispatch(KernelEvents::EXCEPTION, $event);
     } else {
         $response = new Response($contentCollector->retrieve(), $headersCollector->getCode(), $headersCollector->retrieve());
         foreach ($headersCollector->getCookies() as $cookie) {
             $response->headers->setCookie($cookie);
         }
         $response->setProtocolVersion($headersCollector->getVersion());
         $response->setStatusCode($headersCollector->getCode(), $headersCollector->getMessage());
         $response->setTransferInfos($e->getRequest()->getInfo());
         $event = new Event\FilterResponseEvent($this, $request, $requestType, $response);
         $this->getEventDispatcher()->dispatch(KernelEvents::RESPONSE, $event);
         /*
            populate response for service
         */
         $stmt->setResponse($response);
         $event = new Event\PostResponseEvent($this, $request, $response);
         $this->getEventDispatcher()->dispatch(KernelEvents::TERMINATE);
     }
 }