hook_init() 〜 drupal_goto() を drupal8でやる方法

カテゴリ Initial コアバージョン 8.4x 関連モジュール Subscriber

modules/custom/your_module/your_module.services.yml

services:
  your_module.event_subscriber:
    class: Drupal\your_module\EventSubscriber\YourModuleSubscriber
    tags:
      - {name: event_subscriber}

modules/custom/your_module/src/EventSubscriber/Your_moduleSubscriber.php

<?php

namespace Drupal\your_module\EventSubscriber;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class YourModuleSubscriber implements EventSubscriberInterface {

  public function checkForRedirection(GetResponseEvent $event) {
    // 参考)一部の例外を除いて匿名ユーザーはloginページに飛ばす
    if (\Drupal::currentUser()->isAnonymous()) {
      if (!preg_match('!^(/user/|/sended-onetime-link-mail)!', $_SERVER['REQUEST_URI'])) {
        $path = \Drupal\Core\Url::fromUserInput('/user/login');
        $response = new RedirectResponse($path->toString());
        $response->send();
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = array('checkForRedirection');
    return $events;
  }

}

コメント

ユーザー actbrain の写真

動的キャッシュ再生成時に来させたい場合は 優先度 > 27 にする。

    $events[KernelEvents::REQUEST][] = ['checkForRedirection', 30];

何が何でも毎回来させたい場合は 優先度 > 200 にする。

    $events[KernelEvents::REQUEST][] = ['checkForRedirection', 280];

ページ

OTHER FAQ

Drupal開発・運用の疑問/質問の答えはここに

無料ユーザー登録すると質問できます。

カテゴリ Core Ver. 関連モジュール タイトル
テーマ 8.7.x Bartikのtwigについて
フォーム 8.7.x Webform WebformのCheckboxの要素にて表記の変更
コンテンツの作成 8.7.x CkEditor Creditorエディタ内に Colorboxポップアップ を簡単に挿入する方法
アップデート 8.7.2 menu drupal-core 8.7.2にupdateしたところ
Viewsプログラミング 8.6.x Views Drupal8 Viewsの動的キャッシュをクリアする方法
フォーム 8.6.x JavaScript 特定のformに動的にJavaScriptをロードする方法
Commerce2 8.6.x Commerce Order Commerceで注文情報から全Itemを得る方法
Commerce2 8.6.x Commerce Shipment Commerceで配送情報を得る方法
Commerce 8.6.x Commerce Payment Order Commerceで歴代購入数/金額を集計する方法
コンテンツの管理 8.6.x Commerce Commerce orderからすべての商品名を取得する方法
サイトの環境設定 8.6.x Simhony Yaml yamlファイルを読み込む方法
フォーム 8.6.x JavaScript 特定のformにJavaScriptを紐付ける方法
Commerce 8.6.x Commerce Payment Gateway オリジナルCommerce決済モジュール(Offsite)で決済サーバーへのPOST時のエンコードを変更する方法
コンテンツの管理 8.5.x Field File コンテンツのフィールドの表示について
Libraries 8.5.x Libraries Commerceで外部JavaScriptをテスト/本番で読み分ける方法
JavaScript 8.5.x PHP Commerce決済モジュール設定をJavaScriptにデータに渡す方法
サイトの構築 8.3x Webform Webformモジュール メールアドレスの入力ミス確認
Viewsプログラミング 8.4x Views drupal8におけるViewsプログラミング
サイト情報 8.4x JavaScript JavaScriptに変数を渡す方法
テーマ 8.4x hook_preprocess_html bodyタグにnode idやaliasのClassを追加する方法

ページ