/** * Processes an incoming Request object, routes it to the adapter, and returns a response. * * @todo The adapter needs to validate that the core Request object is valid. Ensure JSON, etc. * @param Request $request * @return Response $response */ public function handle(Request $request) { try { $restRequest = new RestRequest($this->config, $request->getMethod(), $request->getUri(), $request->getContent()); $restResponse = $this->adapter->processRequest($restRequest); } catch (\Exception $e) { $restResponse = $this->adapter->handleException($e); } return new Response($restResponse->getContent(), $restResponse->getStatus(), $restResponse->getHeaders()); }
/** * Serializes the "interior" of a model. * This is the serialization that takes place outside of a "data" container. * Can be used for root model and relationship model serialization. * * @param Model $model * @param AdapterInterface $adapter * @return array */ protected function serializeModel(Model $model, AdapterInterface $adapter) { $metadata = $model->getMetadata(); $serialized = ['type' => $model->getType(), 'id' => $model->getId()]; if ($this->depth > 0) { // $this->includeResource($resource); return $serialized; } foreach ($metadata->getAttributes() as $key => $attrMeta) { $value = $model->get($key); $serialized['attributes'][$key] = $this->serializeAttribute($value, $attrMeta); } $serialized['links'] = ['self' => $adapter->buildUrl($metadata, $model->getId())]; $model->enableCollectionAutoInit(false); $this->increaseDepth(); foreach ($metadata->getRelationships() as $key => $relMeta) { $relationship = $model->get($key); $serialized['relationships'][$key] = $this->serializeRelationship($model, $relationship, $relMeta, $adapter); } $this->decreaseDepth(); $model->enableCollectionAutoInit(true); return $serialized; }
/** * Extracts the EntityMetadata from the raw array payload. * * @param array $rawPayload * @param AdapterInterface $adapter * @return EntityMetadata */ protected function extractMetadata(array $rawPayload, AdapterInterface $adapter) { return $adapter->getEntityMetadata($this->extractType($rawPayload)); }