/** * @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 $normalizedInput * @param null $resource * @param Resource $dunglasResource * @param ApiDoc $apiDoc * @param string $type * * @return array * @throws \Exception */ public function getParametersParser($normalizedInput, $resource = null, DunglasResource $dunglasResource, ApiDoc $apiDoc, $type = 'Input') { $supportedParsers = []; $parameters = []; $attributesValidationParser = []; foreach ($this->getParsers($normalizedInput) as $parser) { if ($parser->supports($normalizedInput)) { $supportedParsers[] = $parser; if ($type === 'Output' && !$parser instanceof JmsMetadataParser) { continue; } if ($parser instanceof JmsMetadataParser) { $normalizedInput['groups'] = []; $attributes = $parser->parse($normalizedInput); foreach ($attributes as $key => $value) { if ($type !== 'Input' && $key === 'id' && !empty($value)) { $parameters['id'] = $value; } if (isset($parameters[$key]) && isset($value['description'])) { $parameters[$key]['description'] = $value['description']; } } if (!is_null($resource) && $type !== 'Input') { $transformer = $this->transformerHelper->getTransformer($resource); $attributesTransformer = $parser->parse(['class' => get_class($transformer), 'groups' => []]); $attributes = array_merge($attributes, $attributesTransformer); $this->transformerHelper->getOutputAttr($resource, $parameters, 'doc', $attributes); } continue; } $attributes = $parser->parse($normalizedInput); if ($parser instanceof ValidationParser) { $attributesValidationParser = $attributes; } $parameters = $this->mergeParameters($parameters, $attributes); } } foreach ($supportedParsers as $parser) { if ($parser instanceof PostParserInterface) { $parameters = $this->mergeParameters($parameters, $parser->postParse($normalizedInput, $parameters)); } } if (!empty($attributesValidationParser)) { $this->attributesValidationParser[$dunglasResource->getShortName()] = $attributesValidationParser; } return $parameters; }