Beispiel #1
0
 /**
  * Register a resource definition for this endpoint.
  *
  * @throws LogicException when a resource name was already used.
  * @param ResourceDefinitionInterface $resource
  */
 public function addResourceDefinition(ResourceDefinitionInterface $resource)
 {
     if (array_key_exists($resource->getName(), $this->resources)) {
         throw new LogicException(sprintf('Cannot register a resource named `%s` twice.', $resource->getName()));
     }
     $this->resources[$resource->getName()] = $resource;
 }
 /**
  * @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;
 }