コード例 #1
0
ファイル: Normalizer.php プロジェクト: eliberty/api-bundle
 /**
  * @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();
 }
コード例 #2
0
 /**
  * @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;
 }