/**
  * @param GetResponseForControllerResultEvent $event
  *
  * @return GetResponseForControllerResultEvent
  */
 public function onKernelResponse(GetResponseForControllerResultEvent $event)
 {
     if ($event->hasResponse()) {
         return $event;
     }
     $accept = $event->getRequest()->get('_accept');
     $responseFactory = new Factory($accept);
     $response = $responseFactory->create($event->getControllerResult());
     $event->setResponse($response);
     return $event;
 }
Ejemplo n.º 2
0
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $this->logger->debug('Response builder listener: catch kernel.request event');
     // If this is not a master request, skip handling
     if (!$event->isMasterRequest()) {
         $this->logger->debug('Response builder listener: this is not master request, skip');
         return;
     }
     // If content already prepared
     if ($event->hasResponse()) {
         $this->logger->debug('Response builder listener: event already has response, skip');
         return;
     }
     // Getting controller result
     $result = $event->getControllerResult();
     // If result is Response instance
     if ($result instanceof Response) {
         $this->logger->debug('Response builder listener: controller result is already an instance of Response, skip');
         return;
     }
     // Getting action
     $apiServerAction = $event->getRequest()->attributes->get('apiAction');
     /* @var $apiServerAction ApiServerAction */
     // Something wrong
     if (!$apiServerAction) {
         $this->logger->error('Response parser listener: request has no apiAction attribute, throwing access denied exception');
         throw new AccessDeniedHttpException();
     }
     // Getting api server interface
     $apiServerInterface = $apiServerAction->getApiServerInterface();
     // Getting connection
     $apiServerConnection = $event->getRequest()->attributes->get('apiConnection');
     /* @var $apiServerConnection ApiServerConnection */
     // Something wrong
     if (!$apiServerConnection) {
         $this->logger->error('Response parser listener: request has no apiConnection attribute, throwing access denied exception');
         throw new AccessDeniedHttpException();
     }
     // Creating api response
     try {
         $apiResponse = $apiServerInterface->getApiResponse($result);
         $newApiUserToken = $apiServerConnection->getNewApiUserToken();
         if ($newApiUserToken) {
             $this->logger->debug('Response builder listener: applying new api user token to response');
             $apiResponse->setUserToken($newApiUserToken);
         }
     } catch (\Exception $e) {
         $this->logger->error(sprintf('Response parser listener: problem with building response ("%s"), sending exception response', $e->getMessage()));
         $apiResponse = $apiServerInterface->getExceptionResponse($e->getMessage());
     }
     // Setting response
     $event->setResponse(new JsonResponse($apiResponse->export()));
     $this->logger->debug('Response builder listener: response built');
 }
 /**
  * @param GetResponseForControllerResultEvent $event
  */
 public function postController(GetResponseForControllerResultEvent $event)
 {
     if ($this->viewModelService->getViewModel()->getTemplate() === null) {
         return;
     }
     if (is_array($event->getControllerResult())) {
         $this->viewModelService->set($event->getControllerResult());
     }
     if (!$event->hasResponse()) {
         $event->setResponse($this->viewModelService->render());
     }
 }
 public function filterResponse(GetResponseForControllerResultEvent $event)
 {
     /* @var $request \Symfony\Component\HttpFoundation\Request */
     $request = $event->getRequest();
     if ($request->attributes->has('zend_compat_controller') && !$event->hasResponse()) {
         /* @var $zendController ZendController */
         $zendController = $request->attributes->get('zend_compat_controller');
         $zendController->postDispatch();
         /* @var $zendRequest ZendRequest */
         $zendRequest = $zendController->getRequest();
         /* @var $response Symfony\Component\HttpFoundation\Response */
         $response = new Response();
         /* @var $zendResponse ZendResponse */
         $zendResponse = $zendController->getResponse();
         $response->headers->add($zendResponse->getHeaders());
         $response->setStatusCode($zendResponse->getHttpResponseCode());
         if ($zendController->getHelper('viewrenderer')->getNoRender() === false) {
             // TODO: "html" => ContextSwitch
             $viewName = sprintf("%sBundle:%s:%s.%s.%s", $zendRequest->getModuleName(), $zendRequest->getControllerName(), $zendRequest->getActionName(), "html", "phtml");
             $vars = $zendController->view->allVars();
             foreach ($vars as $k => $v) {
                 if ($v instanceof \Zend_Form) {
                     $v->setView($this->zendView);
                     foreach ($v->getElements() as $element) {
                         $element->setView($this->zendView);
                     }
                 }
             }
             $content = $this->templating->render($viewName, $vars);
             if ($zendController->getHelper('layout')->isEnabled()) {
                 $content = $this->templating->render($zendController->getHelper('layout')->getLayout(), array('content' => $content));
             }
             $response->setContent($content);
         }
         $event->setResponse($response);
     }
 }
 public static function wrapPromise(GetResponseForControllerResultEvent $event)
 {
     if (!$event->hasResponse() && $event->getControllerResult() instanceof PromiseInterface) {
         $event->setResponse(new self($event->getControllerResult()));
     }
 }