You are here

class PathAliasNormalizer in Tome 8

Normalizer for Path alias entities.

@internal

Hierarchy

Expanded class hierarchy of PathAliasNormalizer

1 string reference to 'PathAliasNormalizer'
tome_sync.services.yml in modules/tome_sync/tome_sync.services.yml
modules/tome_sync/tome_sync.services.yml
1 service uses PathAliasNormalizer
serializer.normalizer.path_alias_tome_sync in modules/tome_sync/tome_sync.services.yml
Drupal\tome_sync\Normalizer\PathAliasNormalizer

File

modules/tome_sync/src/Normalizer/PathAliasNormalizer.php, line 16

Namespace

Drupal\tome_sync\Normalizer
View source
class PathAliasNormalizer extends ContentEntityNormalizer {

  /**
   * {@inheritdoc}
   */
  protected $supportedInterfaceOrClass = '\\Drupal\\path_alias\\PathAliasInterface';

  /**
   * The entity repository.
   *
   * @var \Drupal\Core\Entity\EntityRepositoryInterface
   */
  protected $entityRepository;

  /**
   * Constructs a PathAliasNormalizer object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   * @param \Drupal\Core\Entity\EntityTypeRepositoryInterface $entity_type_repository
   *   The entity type repository.
   * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
   *   The entity field manager.
   * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
   *   The entity field manager.
   */
  public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityTypeRepositoryInterface $entity_type_repository = NULL, EntityFieldManagerInterface $entity_field_manager = NULL, EntityRepositoryInterface $entity_repository) {
    parent::__construct($entity_type_manager, $entity_type_repository, $entity_field_manager);
    $this->entityRepository = $entity_repository;
  }

  /**
   * {@inheritdoc}
   */
  public function normalize($object, $format = NULL, array $context = []) {
    $attributes = parent::normalize($object, $format, $context);
    foreach ([
      'path',
      'alias',
    ] as $key) {
      if (!empty($attributes[$key][0]['value'])) {
        $parts = explode('/', $attributes[$key][0]['value']);
        if (count($parts) >= 3 && $this->entityTypeManager
          ->hasDefinition($parts[1]) && is_numeric($parts[2])) {
          if ($entity = $this->entityTypeManager
            ->getStorage($parts[1])
            ->load($parts[2])) {
            $parts[2] = $entity
              ->uuid();
            $attributes[$key][0]['value'] = implode('/', $parts);
          }
        }
      }
    }
    return $attributes;
  }

  /**
   * {@inheritdoc}
   */
  public function denormalize($data, $class, $format = NULL, array $context = []) {

    /** @var \Drupal\path_alias\PathAliasInterface $entity */
    $entity = parent::denormalize($data, $class, $format, $context);
    foreach ([
      'path',
      'alias',
    ] as $key) {
      if ($entity && !empty($entity
        ->get($key)->value)) {
        $parts = explode('/', $entity
          ->get($key)->value);
        if (count($parts) >= 3 && $this->entityTypeManager
          ->hasDefinition($parts[1]) && Uuid::isValid($parts[2])) {
          if ($referenced_entity = $this->entityRepository
            ->loadEntityByUuid($parts[1], $parts[2])) {
            $parts[2] = $referenced_entity
              ->id();
            $entity
              ->set($key, implode('/', $parts));
          }
        }
      }
    }
    return $entity;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY constant Name of key for bubbling cacheability metadata via serialization context.
ContentEntityNormalizer::$entityTypeDenyList protected property Entity type properties that should be excluded from normalization.
ContentEntityNormalizer::$fieldDenyList protected property Field names that should be excluded from normalization.
FieldableEntityNormalizerTrait::$entityFieldManager protected property The entity field manager.
FieldableEntityNormalizerTrait::$entityTypeManager protected property The entity type manager. 1
FieldableEntityNormalizerTrait::$entityTypeRepository protected property The entity type repository.
FieldableEntityNormalizerTrait::constructValue protected function Build the field item value using the incoming data. 7
FieldableEntityNormalizerTrait::denormalizeFieldData protected function Denormalizes entity data by denormalizing each field individually.
FieldableEntityNormalizerTrait::determineEntityTypeId protected function Determines the entity type ID to denormalize as.
FieldableEntityNormalizerTrait::extractBundleData protected function Denormalizes the bundle property so entity creation can use it.
FieldableEntityNormalizerTrait::getEntityFieldManager protected function Returns the entity field manager.
FieldableEntityNormalizerTrait::getEntityTypeDefinition protected function Gets the entity type definition.
FieldableEntityNormalizerTrait::getEntityTypeManager protected function Returns the entity type manager.
FieldableEntityNormalizerTrait::getEntityTypeRepository protected function Returns the entity type repository.
NormalizerBase::$format protected property List of formats which supports (de-)normalization. 3
NormalizerBase::addCacheableDependency protected function Adds cacheability if applicable.
NormalizerBase::checkFormat protected function Checks if the provided format is supported by this normalizer. 2
NormalizerBase::supportsDenormalization public function Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::supportsDenormalization() 1
NormalizerBase::supportsNormalization public function Checks whether the given class is supported for normalization by this normalizer. 1
PathAliasNormalizer::$entityRepository protected property The entity repository.
PathAliasNormalizer::$supportedInterfaceOrClass protected property The interface or class that this Normalizer supports. Overrides ContentEntityNormalizer::$supportedInterfaceOrClass
PathAliasNormalizer::denormalize public function Denormalizes data back into an object of the given class. Overrides EntityNormalizer::denormalize
PathAliasNormalizer::normalize public function Normalizes an object into a set of arrays/scalars. Overrides ContentEntityNormalizer::normalize
PathAliasNormalizer::__construct public function Constructs a PathAliasNormalizer object. Overrides EntityNormalizer::__construct