Exemplo n.º 1
0
 /**
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  *
  * @param Request $request
  * @param mixed   $data
  *
  * @return Response
  * @throws ValidationException
  */
 public function createResponse(Request $request, $data = null)
 {
     /** @var RequestMeta $meta */
     $meta = $request->attributes->get(RequestMeta::ATTRIBUTE);
     $operation = $meta->getOperation();
     $body = $data === null ? '' : $data;
     $statusCode = 200;
     $codes = $operation->getStatusCodes();
     $understands204 = in_array(204, $codes);
     foreach ($codes as $code) {
         if ('2' == substr((string) $code, 0, 1)) {
             $statusCode = $code;
             break;
         }
     }
     $schema = $meta->getOperation()->getResponse($statusCode)->getSchema();
     if ($this->validator) {
         $result = $this->validator->validate($schema, $body);
         if (!$result->isvalid()) {
             throw new ValidationException($result->getErrorMessages(), Response::HTTP_INTERNAL_SERVER_ERROR, ValidationException::MESSAGE_OUTPUT);
         }
     }
     if ($body !== '') {
         $body = $this->hydrator->dehydrate($body, $schema);
     } elseif ($understands204) {
         $statusCode = 204;
     }
     return new JsonResponse($body, $statusCode);
 }
Exemplo n.º 2
0
 /**
  * @param Request $request
  *
  * @throws ValidationException
  * @throws MalformedContentException
  */
 public function process(Request $request)
 {
     if (!$request->attributes->has(RequestMeta::ATTRIBUTE_URI)) {
         throw new \UnexpectedValueException("Missing document URI");
     }
     $description = $this->repository->get($request->attributes->get(RequestMeta::ATTRIBUTE_URI));
     $operation = $description->getPath($request->attributes->get(RequestMeta::ATTRIBUTE_PATH))->getOperation($request->getMethod());
     $body = null;
     if ($request->getContent()) {
         $body = json_decode($request->getContent());
         if (json_last_error() !== JSON_ERROR_NONE) {
             throw new MalformedContentException(json_last_error_msg());
         }
     }
     $result = $this->validator->validate($operation->getRequestSchema(), $coercedParams = $this->parametersAssembler->assemble($operation, $request->query->all(), $request->attributes->all(), $request->headers->all(), $body));
     foreach ($coercedParams as $attribute => $value) {
         /** @var ScalarSchema  $schema*/
         if (($schema = $operation->getParameter($attribute)->getSchema()) instanceof ScalarSchema) {
             if ($schema->isDateTime()) {
                 $value = $this->dateTimeSerializer->deserialize($value, $schema);
             }
         }
         $request->attributes->set($attribute, $value);
     }
     if ($this->hydrator && ($bodyParam = $description->getRequestBodyParameter($operation->getPath(), $operation->getMethod()))) {
         $body = $this->hydrator->hydrate($body, $bodyParam->getSchema());
         $request->attributes->set($bodyParam->getName(), $body);
     }
     $request->attributes->set(RequestMeta::ATTRIBUTE, new RequestMeta($description, $operation));
     if (!$result->isValid()) {
         throw new ValidationException($result->getErrorMessages());
     }
 }