You are here

class SubrequestSubscriber in GraphQL 8.4

Same name and namespace in other branches
  1. 8.3 src/EventSubscriber/SubrequestSubscriber.php \Drupal\graphql\EventSubscriber\SubrequestSubscriber

Sets the language on subrequests.

Hierarchy

Expanded class hierarchy of SubrequestSubscriber

1 string reference to 'SubrequestSubscriber'
graphql.services.yml in ./graphql.services.yml
graphql.services.yml
1 service uses SubrequestSubscriber
graphql.subrequest_subscriber in ./graphql.services.yml
Drupal\graphql\EventSubscriber\SubrequestSubscriber

File

src/EventSubscriber/SubrequestSubscriber.php, line 17

Namespace

Drupal\graphql\EventSubscriber
View source
class SubrequestSubscriber implements EventSubscriberInterface {
  use CurrentLanguageResetTrait;

  /**
   * Constructs a SubrequestSubscriber object.
   *
   * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager
   * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translator
   * @param \Drupal\Core\Session\AccountInterface $currentUser
   * @param \Drupal\language\LanguageNegotiatorInterface $languageNegotiator
   */
  public function __construct(LanguageManagerInterface $languageManager, TranslatorInterface $translator, AccountInterface $currentUser, LanguageNegotiatorInterface $languageNegotiator = NULL) {
    $this->languageManager = $languageManager;
    $this->translator = $translator;
    $this->currentUser = $currentUser;
    $this->languageNegotiator = $languageNegotiator;
  }

  /**
   * Handle kernel request events.
   *
   * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
   *   The kernel event object.
   */
  public function onKernelRequest(GetResponseEvent $event) : void {
    $request = $event
      ->getRequest();
    if (!$request->attributes
      ->has('_graphql_subrequest')) {
      return;
    }
    $request->attributes
      ->set('_controller', '\\Drupal\\graphql\\Controller\\SubrequestExtractionController:extract');
    $this
      ->resetLanguageContext();
  }

  /**
   * Handle kernel request finished events.
   *
   * @param \Symfony\Component\HttpKernel\Event\FinishRequestEvent $event
   *   The kernel event object.
   */
  public function onKernelRequestFinished(FinishRequestEvent $event) : void {
    $request = $event
      ->getRequest();
    if (!$request->attributes
      ->has('_graphql_subrequest')) {
      return;
    }
    $this
      ->resetLanguageContext();
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    return [
      KernelEvents::REQUEST => 'onKernelRequest',
      KernelEvents::FINISH_REQUEST => 'onKernelRequestFinished',
    ];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CurrentLanguageResetTrait::$currentUser protected property The current user service.
CurrentLanguageResetTrait::$languageManager protected property The language manager.
CurrentLanguageResetTrait::$languageNegotiator protected property The language negotiator.
CurrentLanguageResetTrait::$translator protected property The translator.
CurrentLanguageResetTrait::resetLanguageContext protected function Resets the global language context across different services.
SubrequestSubscriber::getSubscribedEvents public static function Returns an array of event names this subscriber wants to listen to.
SubrequestSubscriber::onKernelRequest public function Handle kernel request events.
SubrequestSubscriber::onKernelRequestFinished public function Handle kernel request finished events.
SubrequestSubscriber::__construct public function Constructs a SubrequestSubscriber object.