public function testJsonResponseSetter() { $data = ['foo', 'bar']; $response = new JsonResponse(); $response->setContent($data); $this->assertEquals($data, $response->getContent()); }
/** * @param Request $request * @param JsonResponse $response * @throws \Exception */ protected function wrapResponse(Request $request, JsonResponse $response) { switch ($request->query->get(self::PARAMETER_WRAPPER)) { case self::WRAPPER_POST_MESSAGE: $response->setContent(sprintf($this->getPostMessageTemplate(), $response->getContent(), $this->getCallbackFromRequest($request), $this->getPostMessageOrigin()))->headers->set('Content-Type', 'text/html'); break; default: $response->setCallback($request->query->get(self::PARAMETER_CALLBACK)); break; } }
/** * @param Request $request * @param JsonResponse $response */ protected function wrapResponse(Request $request, JsonResponse $response) { switch ($request->query->get(self::PARAMETER_WRAPPER)) { case self::WRAPPER_POST_MESSAGE: $response->setContent($this->twig->render('MediaMonksRestApiBundle::post_message.html.twig', ['request' => $request, 'response' => $response, 'callback' => $request->query->get(self::PARAMETER_CALLBACK), 'origin' => $this->getPostMessageOrigin()]))->headers->set('Content-Type', 'text/html'); break; default: $response->setCallback($request->query->get(self::PARAMETER_CALLBACK)); break; } }
/** * 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); }