public function process(ResponseInterface $response, ResourceDefinitionInterface $resource) { if (!$response instanceof ApiResponse) { throw new InvalidArgumentException(sprintf('Expected an `ApiResponse`, got `%s` instead', get_class($response))); } $returnType = $resource->getReturnType(); $config = new Configuration($returnType); $hydratorClass = $config->createFactory()->getHydratorClass(); $hydrator = new $hydratorClass(); $object = new $returnType(); if ($resource->getMethod() !== ResourceDefinitionInterface::METHOD_CGET) { return $hydrator->hydrate($response->getData(), $object); } $result = []; foreach ($response->getData() as $item) { $current = clone $object; $result[] = $hydrator->hydrate($item, $current); } return $result; }
/** * @param ResponseInterface $response * @param ResourceDefinitionInterface $resource * @return array */ public function process(ResponseInterface $response, ResourceDefinitionInterface $resource) { if (!$response instanceof ApiResponse) { throw new \InvalidArgumentException(sprintf('Expected an ApiResponse, got %s', get_class($response))); } $dataClass = $resource->getReturnType(); if (!$dataClass) { throw new RuntimeException(sprintf('Return type is not defined for resource `%s` (%s), cannot hydrate', $resource->getName(), $resource->getPath())); } if (!class_exists($dataClass)) { throw new RuntimeException(sprintf('Cannot hydrate an instance of class `%s` as the class does not exist', $dataClass)); } $reflection = new \ReflectionClass($dataClass); $this->reflObject = new \ReflectionObject($reflection->newInstance()); if ($resource->getMethod() === ResourceDefinitionInterface::METHOD_CGET) { $result = []; foreach ($response->getData() as $row) { $result[] = $this->hydrateRow($reflection->newInstance(), $row); } } else { $result = $this->hydrateRow($reflection->newInstance(), $response->getData()); } return $result; }