mix-1.1.0-rc1/src/EventSubscriber/MixSubscriber.php

src/EventSubscriber/MixSubscriber.php
<?php

namespace Drupal\mix\EventSubscriber;

use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\PageCache\ResponsePolicy\KillSwitch;
use Drupal\Core\Routing\UrlGeneratorInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
 * Mix event subscriber.
 */
class MixSubscriber implements EventSubscriberInterface {

  use StringTranslationTrait;

  /**
   * A config object for the mix settings configuration.
   *
   * @var \Drupal\Core\Config\Config
   */
  protected $config;

  /**
   * The current account.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected $currentUser;

  /**
   * The URL generator.
   *
   * @var \Drupal\Core\Routing\UrlGeneratorInterface
   */
  protected $urlGenerator;

  /**
   * The messenger.
   *
   * @var \Drupal\Core\Messenger\MessengerInterface
   */
  protected $messenger;

  /**
   * The kill switch.
   *
   * @var \Drupal\Core\PageCache\ResponsePolicy\KillSwitch
   */
  protected $killSwitch;

  /**
   * Constructs a MixSubscriber object.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   A config factory for retrieving required config objects.
   * @param \Drupal\Core\Session\AccountInterface $currentUser
   *   The current user.
   * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
   *   The url generator.
   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
   *   The messenger.
   * @param \Drupal\Core\PageCache\ResponsePolicy\KillSwitch $killSwitch
   *   The kill switch.
   */
  public function __construct(
      ConfigFactoryInterface $config_factory,
      AccountInterface $currentUser,
      UrlGeneratorInterface $url_generator,
      MessengerInterface $messenger,
      KillSwitch $killSwitch
    ) {
    $this->config = $config_factory->get('mix.settings');
    $this->currentUser = $currentUser;
    $this->urlGenerator = $url_generator;
    $this->messenger = $messenger;
    $this->killSwitch = $killSwitch;
  }

  /**
   * Kernel request event handler.
   *
   * @param \Symfony\Component\HttpKernel\Event\RequestEvent $event
   *   Response event.
   */
  public function onKernelRequest(RequestEvent $event) {
    $isDevMode = $this->config->get('dev_mode');
    if ($isDevMode) {
      if ($this->currentUser->hasPermission('administer site configuration')) {
        $message = $this->t('In development mode. <a href=":url">Go online.</a>', [':url' => $this->urlGenerator->generateFromRoute('mix.settings')]);
        $this->messenger->addStatus($message, FALSE);
      }
      else {
        $this->messenger->addStatus($this->t('In development mode.'), FALSE);
      }
      // Prevent page to be cached.
      $this->killSwitch->trigger();
    }
  }

  /**
   * Kernel response event handler.
   *
   * @param \Symfony\Component\HttpKernel\Event\ResponseEvent $event
   *   Response event.
   */
  public function onKernelResponse(ResponseEvent $event) {
    $removeXGenerator = $this->config->get('remove_x_generator');
    if ($removeXGenerator) {
      $response = $event->getResponse();
      $response->headers->remove('X-Generator');
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = ['onKernelRequest', 30];
    $events[KernelEvents::RESPONSE][] = ['onKernelResponse', -10];
    return $events;
  }

}

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

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