/** * @param $object * @param ResourceInterface $dunglasResource * @param Manager $fractalManager * @param Request|null $request * @param bool $defaultIncludes * * @return array * @throws \Exception */ public function normalize($object, ResourceInterface $dunglasResource, Manager $fractalManager, Request $request = null, $defaultIncludes = true) { $transformer = $this->transformerHelper->getTransformer($dunglasResource->getShortName()); if (null !== $request) { $fractalManager->parseIncludes($this->getEmbedsWithoutOptions($transformer, $request)); } $resource = new Item($object, $transformer); if ($object instanceof Paginator || $object instanceof PersistentCollection) { $resource = new Collection($object, $transformer); if ($fractalManager->getSerializer() instanceof ArraySerializer) { $resource->setPaginator(new DunglasPaginatorAdapter($object, $resource)); } } $rootScope = $fractalManager->createData($resource, $dunglasResource->getShortName()); if ($defaultIncludes === false) { $transformer->setDefaultIncludes([]); } $transformer->setCurrentScope($rootScope)->setEmbed($dunglasResource->getShortName()); return $rootScope->toArray(); }
/** * @param Request $request * * @return Manager */ protected function getFractalManager(Request $request) { $serializer = new SerializerFactory(); $manager = new Manager(); $manager->setApiClassMetadataFactory($this->get('api.mapping.class_metadata_factory'))->setContextBuilder($this->get('api.json_ld.context_builder'))->setRouter($this->get('api.router'))->setResourceCollection($this->get('api.resource_collection'))->setSerializer($serializer->getSerializer($request))->setGroupsContextChainer($this->get('api.group.context.chainer'))->setSerializationGroupName($request->headers->get('e-serializer-group', null)); return $manager; }