class DefaultContentSubscriber

Same name in this branch
  1. 11.x core/modules/media/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\media\EventSubscriber\DefaultContentSubscriber
  2. 11.x core/modules/layout_builder/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\layout_builder\EventSubscriber\DefaultContentSubscriber
  3. 11.x core/modules/content_moderation/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\content_moderation\EventSubscriber\DefaultContentSubscriber
  4. 11.x core/modules/link/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\link\EventSubscriber\DefaultContentSubscriber
  5. 11.x core/modules/path/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\path\EventSubscriber\DefaultContentSubscriber
  6. 11.x core/modules/file/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\file\EventSubscriber\DefaultContentSubscriber
Same name and namespace in other branches
  1. main core/modules/media/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\media\EventSubscriber\DefaultContentSubscriber
  2. main core/modules/file/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\file\EventSubscriber\DefaultContentSubscriber
  3. main core/modules/layout_builder/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\layout_builder\EventSubscriber\DefaultContentSubscriber
  4. main core/modules/content_moderation/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\content_moderation\EventSubscriber\DefaultContentSubscriber
  5. main core/modules/link/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\link\EventSubscriber\DefaultContentSubscriber
  6. main core/modules/path/src/EventSubscriber/DefaultContentSubscriber.php \Drupal\path\EventSubscriber\DefaultContentSubscriber

Subscribes to default content-related events.

@internal Event subscribers are internal.

Hierarchy

  • class \Drupal\menu_link_content\EventSubscriber\DefaultContentSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface

Expanded class hierarchy of DefaultContentSubscriber

1 file declares its use of DefaultContentSubscriber
DefaultContentTest.php in core/modules/menu_link_content/tests/src/Kernel/DefaultContentTest.php

File

core/modules/menu_link_content/src/EventSubscriber/DefaultContentSubscriber.php, line 20

Namespace

Drupal\menu_link_content\EventSubscriber
View source
final class DefaultContentSubscriber implements EventSubscriberInterface {
  public function __construct(private readonly EntityRepositoryInterface $entityRepository, #[AutowireServiceClosure('logger.channel.default_content')] private readonly \Closure $logger) {
  }
  
  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() : array {
    return [
      PreExportEvent::class => 'preExport',
    ];
  }
  
  /**
   * Reacts before an entity is exported.
   *
   * Adds an export callback to ensure parent menu links are marked as
   * dependencies, when exporting menu link content entities.
   *
   * @param \Drupal\Core\DefaultContent\PreExportEvent $event
   *   The event object.
   */
  public function preExport(PreExportEvent $event) : void {
    if (!$event->entity instanceof MenuLinkContentInterface) {
      return;
    }
    $parentId = $event->entity
      ->getParentId();
    if (!str_starts_with($parentId, 'menu_link_content:')) {
      return;
    }
    [, $uuid] = explode(':', $parentId);
    $parent = $this->entityRepository
      ->loadEntityByUuid('menu_link_content', $uuid);
    if ($parent instanceof MenuLinkContentInterface) {
      $event->metadata
        ->addDependency($parent);
      return;
    }
    $this->getLogger()
      ->error("The parent (%parent) of menu link %uuid could not be loaded.", [
      '%parent' => $uuid,
      '%uuid' => $event->entity
        ->uuid(),
    ]);
  }
  
  /**
   * Gets the logging service.
   *
   * @return \Psr\Log\LoggerInterface
   *   The logging service.
   */
  private function getLogger() : LoggerInterface {
    return ($this->logger)();
  }

}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.