public function testRegisterFormat() { $format = 'foo'; $mimeType = 'foo/bar'; $this->negotiator->registerFormat($format, array($mimeType)); $this->assertEquals($format, $this->negotiator->getFormat($mimeType)); }
/** * @param Request $request * @param Response $response * @param string $resource * @param \Closure $callback * @return Response */ public function handle(Request $request, Response $response, $resource, $callback) { $accept = $this->negotiator->getBest($request->headers->get('Accept')); $format = $this->negotiator->getFormat($accept->getValue()); if ($format == 'html') { $format = 'json'; } $response->headers->set('Content-Type', $accept->getValue()); try { $manager = $this->managerFactory->create($resource); $context = new DeserializationContext(); $context->enableMaxDepthChecks(); $object = null; $content = $request->getContent(); if (!empty($content)) { $object = $this->serializer->create($request->isMethod('patch') ? 'doctrine' : 'default')->deserialize($request->getContent(), $manager->getClass(), $format, $context); } $data = $this->envelopeFactory->create($callback($manager, $object))->export(); } catch (InvalidException $e) { $response->setStatusCode(400); $data = array("code" => 400, "message" => $e->getMessage(), "errors" => $e->getErrors()); } catch (NotFoundException $e) { $response->setStatusCode(404); $data = array("code" => 404, "message" => $e->getMessage()); } catch (UnsupportedMethodException $e) { $response->setStatusCode(405); $data = array("code" => 405, "message" => $e->getMessage()); } catch (HttpException $e) { $response->setStatusCode($e->getStatusCode()); $data = array("code" => $e->getStatusCode(), "message" => $e->getMessage()); } catch (\Exception $e) { $this->logger->critical($e); $response->setStatusCode(500); $data = array("code" => 500, "message" => $e->getMessage()); } $groups = array('Default', 'lemon_rest', 'lemon_rest_' . $resource, 'lemon_rest_' . $resource . '_' . strtolower($request->getMethod())); if (is_object($data)) { $groups[] = 'lemon_rest_' . $resource . '_view'; } else { $groups[] = 'lemon_rest_' . $resource . '_list'; } $context = SerializationContext::create()->enableMaxDepthChecks(); $context->setGroups($groups); if ($accept->hasParameter('version')) { $context->setVersion($accept->getParameter('version')); } $output = $this->serializer->create('default')->serialize($data, $format, $context); $response->setContent($output); return $response; }