/** * @param \Symfony\Component\HttpFoundation\Request $request * @param \Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter $configuration * @return bool * @throws \Exception */ public function apply(Request $request, ParamConverter $configuration) { $class = $configuration->getClass(); $options = $this->getOptions($configuration); switch ($request->getMethod()) { case 'GET': $data = $this->buildModelFromGetRequest($request, $configuration, $options); break; case 'PATCH': $data = $this->buildModelFromPatchRequest($request, $configuration, $options); break; case 'POST': $data = $this->buildModelFromPostRequest($request, $configuration, $options); break; case 'DELETE': $data = $this->buildModelFromDeleteRequest($request, $configuration, $options); break; default: $data = $request->getContent(); } $object = null; if ((!empty($data) || false === $configuration->isOptional()) && $request->headers->get('Content-Type') != 'application/octet-stream') { $object = $this->serializer->deserialize($data, $class, $options['format']); } if (null === $object && false === $configuration->isOptional()) { throw new NotFoundHttpException(sprintf('%s object not found.', $class)); } if (null !== $object) { if ($this->filterer) { $this->filterer->apply($object); } $constraintViolations = $this->validator->validate($object); if ($constraintViolations->count()) { throw new ConstraintViolationException($constraintViolations); } } $request->attributes->set($configuration->getName(), $object); return true; }