/** * 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); }
/** * 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; }
/** * 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); }
/** * @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); }