Esempio n. 1
0
 /**
  * Fire the main transformer.
  *
  * @internal
  *
  * @param TransformerAbstract|callable $transformer
  * @param mixed                        $data
  *
  * @return array
  * @throws EntityNotFoundException
  */
 protected function fireTransformer($transformer, $data)
 {
     $this->transformer = $transformer;
     $includedData = [];
     $transformedData = [];
     $dataTransformer = [];
     if ($this->getManager()->getSerializer() instanceof DataHydraSerializer && !empty($data)) {
         $transformedData['@id'] = $this->getGenerateRoute($data);
     }
     if ($this->getManager()->getSerializer() instanceof DataHydraSerializer && !empty($this->getEntityName())) {
         $transformedData['@type'] = $this->getEntityName();
     }
     try {
         $dataTransformer = is_callable($transformer) ? call_user_func($transformer, $data) : $transformer->transform($data);
     } catch (EntityNotFoundException $e) {
         if ($this->resource instanceof Item && !$this->parent instanceof Scope) {
             throw new EntityNotFoundException();
         }
     }
     $transformedData = array_merge($transformedData, $dataTransformer);
     if ($this->getManager()->getGroupsContextChainer() instanceof GroupsContextChainer) {
         $transformedData = $this->getManager()->getGroupsContextChainer()->serialize($this->transformer->getCurrentResourceKey(), $transformedData, $this->getDunglasResource()->getVersion());
     }
     if ($this->transformerHasIncludes($transformer)) {
         $includedData = $this->fireIncludedTransformers($transformer, $data);
         // If the serializer does not want the includes to be side-loaded then
         // the included data must be merged with the transformed data.
         if (!$this->manager->getSerializer()->sideloadIncludes() && is_array($includedData)) {
             $transformedData = array_merge($transformedData, $includedData);
         }
     }
     return array($transformedData, $includedData);
 }
Esempio n. 2
0
 /**
  * @param TransformerAbstract $transformer
  * @param                     $object
  * @param string              $apiVersion
  *
  * @return Scope
  */
 protected function initScope(TransformerAbstract $transformer, $object, $apiVersion = "v2")
 {
     $resource = new Item($object, $transformer);
     $scope = $this->fractal->createData($resource);
     $shortName = $transformer->getCurrentResourceKey();
     if (!($dunglasResource = $this->resourceCollection->getResourceForShortNameWithVersion(ucfirst($shortName), $apiVersion))) {
         throw new \InvalidArgumentException(sprintf('The resource "%s" cannot be found.', $shortName));
     }
     $scope->setDunglasResource($dunglasResource);
     return $scope;
 }