jsonapi_extras-8.x-3.16/src/Normalizer/ResourceObjectNormalizer.php

src/Normalizer/ResourceObjectNormalizer.php
<?php

namespace Drupal\jsonapi_extras\Normalizer;

use Drupal\Core\Config\Entity\ConfigEntityInterface;
use Drupal\jsonapi\JsonApiResource\ResourceObject;
use Drupal\jsonapi\Normalizer\Value\CacheableNormalization;
use Drupal\jsonapi_extras\ResourceType\ConfigurableResourceType;
use Shaper\Util\Context;

/**
 * Decorates the JSON:API ResourceObjectNormalizer.
 *
 * @internal
 */
class ResourceObjectNormalizer extends JsonApiNormalizerDecoratorBase {

  /**
   * {@inheritdoc}
   */
  public function normalize($object, $format = NULL, array $context = []): array|bool|string|int|float|null|\ArrayObject {
    assert($object instanceof ResourceObject);
    $resource_type = $object->getResourceType();
    $cacheable_normalization = parent::normalize($object, $format, $context);
    assert($cacheable_normalization instanceof CacheableNormalization);
    if (is_subclass_of($resource_type->getDeserializationTargetClass(), ConfigEntityInterface::class)) {
      return new CacheableNormalization(
        $cacheable_normalization,
        static::enhanceConfigFields($object, $cacheable_normalization->getNormalization(), $resource_type)
      );
    }
    return $cacheable_normalization;
  }

  /**
   * Applies field enhancers to a config entity normalization.
   *
   * @param mixed $object
   *   The parent object.
   * @param array $normalization
   *   The normalization to be enhanced.
   * @param \Drupal\jsonapi_extras\ResourceType\ConfigurableResourceType $resource_type
   *   The resource type of the normalized resource object.
   *
   * @return array
   *   The enhanced field data.
   */
  protected static function enhanceConfigFields($object, array $normalization, ConfigurableResourceType $resource_type) {
    if (!empty($normalization['attributes'])) {
      foreach ($normalization['attributes'] as $field_name => $field_value) {
        $enhancer = $resource_type->getFieldEnhancer($field_name);
        if (!$enhancer) {
          continue;
        }
        $context['field_item_object'] = $object;
        $normalization['attributes'][$field_name] = $enhancer->undoTransform($field_value, new Context($context));
      }
    }
    return $normalization;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc