コード例 #1
0
 /**
  * @param Request $request
  * @param SymfonyResponse $response
  * @param ResponseModel $responseModel
  * @return JsonResponse|SymfonyResponse
  */
 protected function serialize(Request $request, SymfonyResponse $response, ResponseModel $responseModel)
 {
     switch ($request->getRequestFormat()) {
         case Format::FORMAT_XML:
             $response->setContent($this->getSerializedContent($request, $responseModel));
             break;
         default:
             $headers = $response->headers;
             $response = new JsonResponse($this->getSerializedContent($request, $responseModel), $response->getStatusCode());
             $response->headers = $headers;
             // some headers might mess up if we pass it to the JsonResponse
             break;
     }
     return $response;
 }
コード例 #2
0
 /**
  * converts content to correct output format
  *
  * @param FilterResponseEvent $event
  */
 public function onResponse(FilterResponseEvent $event)
 {
     if (!$this->isActive($event)) {
         return;
     }
     $request = $event->getRequest();
     $response = $event->getResponse();
     $content = $response->getContent();
     // convert content to content container
     if (!$content instanceof ResponseContainer) {
         $content = ResponseContainer::createAutoDetect($response);
     }
     // override http status code if needed
     $statusCode = $content->getStatusCode();
     if (!empty($statusCode)) {
         $response->setStatusCode($content->getStatusCode());
     }
     // set 204 header for empty content
     if ($content->isEmpty() && !$response->isRedirect()) {
         $response->setStatusCode(Response::HTTP_NO_CONTENT);
         $content->setStatusCode(Response::HTTP_NO_CONTENT);
     }
     // put statusCode in response and force 200 OK in header?
     if ($request->headers->has('X-Force-Status-Code-200') || $request->getRequestFormat() == self::FORMAT_JSON && $request->query->has('callback')) {
         $content->setReturnStatusCode(true);
         $response->setStatusCode(Response::HTTP_OK);
         $response->headers->set('X-Status-Code', Response::HTTP_OK);
     }
     // serialize content container
     try {
         $context = new SerializationContext();
         $context->setSerializeNull(true);
         $format = $event->getRequest()->getRequestFormat();
         $contentSerialized = $this->serializer->serialize($content->toArray(), $format, $context);
         switch ($format) {
             case self::FORMAT_XML:
                 $response->setContent($contentSerialized);
                 break;
             default:
                 $headers = $response->headers;
                 $response = new JsonResponse(null, $response->getStatusCode());
                 $response->headers = $headers;
                 $response->setContent($contentSerialized);
                 break;
         }
     } catch (\Exception $e) {
         $response = new JsonResponse(['error' => ['code' => 'error.api.middleware', 'message' => $e->getMessage()]]);
     }
     // force empty output on a no-content response
     if ($content->isEmpty() && $response->isEmpty()) {
         $response->setContent('');
     }
     $event->setResponse($response);
 }