/**
  * Get request includes to prepare the eager loading request
  *
  * @return array
  */
 protected function withInclude()
 {
     $with = [];
     // Get includes
     $includes = $this->response->getManager()->getRequestedIncludes();
     // Check if the includes is in the available list
     // For security reason and validation
     foreach ($includes as $include) {
         // Add the include in the with value for eager loading, THIS IS VERY IMPORTANT
         // @see http://laravel.com/docs/eloquent#eager-loading
         if (in_array($include, $this->transformer->getAvailableIncludes())) {
             $with[] = $include;
         }
     }
     return $with;
 }
Exemple #2
0
 /**
  * Determine if a transformer has any available includes.
  *
  * @author Morten Rugaard <*****@*****.**>
  *
  * @param  \Nodes\Api\Transformer\TransformerAbstract|\League\Fractal\TransformerAbstract|callable $transformer
  * @return bool
  */
 protected function transformerHasIncludes($transformer)
 {
     if (!$transformer instanceof NodesTransformerAbstract && !$transformer instanceof FractalTransformerAbstract) {
         return false;
     }
     $defaultIncludes = $transformer->getDefaultIncludes();
     $availableIncludes = $transformer->getAvailableIncludes();
     return !empty($defaultIncludes) || !empty($availableIncludes);
 }
 /**
  * Fire the included transformers.
  *
  * @internal
  *
  * @param \League\Fractal\TransformerAbstract $transformer
  * @param mixed                               $data
  *
  * @return array
  */
 protected function fireIncludedTransformers($transformer, $data)
 {
     $this->availableIncludes = $transformer->getAvailableIncludes();
     return $transformer->processIncludedResources($this, $data) ?: [];
 }
Exemple #4
0
 /**
  * Get includes as their array keys for eager loading.
  *
  * @param \League\Fractal\TransformerAbstract $transformer
  * @param string|array                        $requestedIncludes
  *
  * @return array
  */
 protected function mergeEagerLoads($transformer, $requestedIncludes)
 {
     $availableIncludes = array_intersect($transformer->getAvailableIncludes(), (array) $requestedIncludes);
     $includes = array_merge($availableIncludes, $transformer->getDefaultIncludes());
     $eagerLoads = [];
     foreach ($includes as $key => $value) {
         $eagerLoads[] = is_string($key) ? $key : $value;
     }
     return $eagerLoads;
 }
 /**
  * Specify relations for eager loading.
  *
  * @return array
  */
 protected function getEagerLoad()
 {
     $includes = $this->transformer->getAvailableIncludes();
     return $includes ?: [];
 }
Exemple #6
0
 /**
  * Prepare root scope and set some meta information.
  *
  * @param Item|Collection $resource
  *
  * @return \League\Fractal\Scope
  */
 protected function prepareRootScope($resource)
 {
     $resource->setMetaValue('available_includes', $this->transformer->getAvailableIncludes());
     $resource->setMetaValue('default_includes', $this->transformer->getDefaultIncludes());
     return $this->fractal->createData($resource);
 }
Exemple #7
0
 /**
  * @param TransformerAbstract $transformer
  * @param Request             $request
  *
  * @return array
  */
 private function getEmbedsWithoutOptions(TransformerAbstract $transformer, Request $request)
 {
     $embeds = $request->get('embed', null);
     if (null === $embeds) {
         $embeds = implode(',', $transformer->getDefaultIncludes());
     }
     $embedAvailable = $request->headers->get(self::EMBED_AVAILABLE, 0);
     if ($request->headers->has(self::EMBED_AVAILABLE) && !$embedAvailable) {
         $transformer->setDefaultIncludes([]);
     }
     if ($embedAvailable) {
         if (is_null($embeds)) {
             $embeds = implode(',', $transformer->getAvailableIncludes());
         } else {
             $arrayEmbed = array_merge(explode(',', $embeds), $transformer->getAvailableIncludes());
             $embeds = implode(',', $arrayEmbed);
         }
     }
     return explode(',', $embeds);
 }
 /**
  * @param TransformerAbstract $transformer
  * @param                     $object
  * @param                     $embed
  * @param string              $version
  *
  * @return bool
  */
 protected function isEmbed(TransformerAbstract $transformer, $object, $embed, $version = 'v2')
 {
     if (in_array($embed, $transformer->getAvailableIncludes())) {
         return call_user_func([$object, 'get' . ucfirst($embed)]);
     }
     return null;
 }