public function serializeResource(Resource $resource) { $data['id'] = $resource->getId(); $data['_type'] = $resource->getType()->getName(); $data['href'] = $this->primate->getBaseUrl() . '/' . $resource->getType()->getName() . '/' . $resource->getId(); foreach ($resource->getProperties() as $name => $value) { switch (gettype($value)) { case 'array': $data[$name] = '[]'; break; case 'object': if (is_subclass_of($value, '\\Primate\\ResourceInterface')) { $data[$name] = $this->serializeResource($value); } else { $data[$name] = '???'; } break; default: $data[$name] = $value; break; } } return $data; }
public function loadResource(Resource $resource, $expands = []) { $repo = $resource->getType()->getRepository(); $resources = [$resource]; $repo->loadResources($resources, $this); foreach ($resource->getProperties() as $key => $value) { if (in_array($key, $expands)) { foreach ($expands as $expand) { $subExpands = []; if (substr($expand, 0, strlen($key) + 1) == $key . '.') { $subExpands[] = substr($expand, strlen($key) + 1); } } $subResource = $resource->getProperty($key); $this->loadResource($subResource, $subExpands); } } return $resource; }
/** * Returns the loader for a resource. * * @param Resource $resource The resource. * * @return LoaderInterface|null The resource loader. */ public function resolve(Resource $resource) { if ($resource instanceof ResourceSupport) { $loader = $this->resolver->resolve($resource->getSupportResource(), $resource->getSupportType()); } else { $loader = $this->resolver->resolve($resource->getResource(), $resource->getType()); } return false === $loader ? null : $loader; }