Drupal 8 Webサイトでユーザーを自動ログインするためにカスタムモジュールでイベントディスパッチャーを使用しています。onRequest機能でKernelEvents :: REQUESTを使用しています。テスト用にエコーを配置しています関数が呼び出されたこと:
Drupalキャッシュの動作が正確にわからない...匿名かどうかにかかわらず、すべてのリクエストでイベントをトリガーする方法はありますか?または、自動ログインを実行する別のより良い方法?ありがとうございます。
私のモジュール構造:
/mymodule
|-- /src
|---- /Controller
|------ MyModuleController.php
|---- /EventSubscriber
|------ MyModuleEventSubscriber.php
mymodule.info.yml
mymodule.routing.yml
mymodule.services.yml
MyModuleEventSubscriber.php
<?php
namespace Drupal\mymodule\EventSubscriber;
use Drupal\Core\Routing\ResettableStackedRouteMatchInterface;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\externalauth\ExternalAuthInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\RedirectResponse;
class MyModuleEventSubscriber implements EventSubscriberInterface {
protected $currentRouteMatch;
protected $externalauth;
protected $currentUser;
/**
* Constructs a MyModuleEventSubscriber object.
*/
public function __construct(ResettableStackedRouteMatchInterface $currentRouteMatch, ExternalAuthInterface $externalauth, AccountProxyInterface $currentUser) {
$this->currentRouteMatch = $currentRouteMatch;
$this->externalauth = $externalauth;
$this->currentUser = $currentUser;
}
/**
* Implements EventSubscriberInterface::getSubscribedEvents().
*
* @return array
* An array of event listener definitions.
*/
static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = array('onRequest');
return $events;
}
public function onRequest(GetResponseEvent $event) {
// echo 'test' => do my echo here
if ($this->currentUser->id() == '0') {
auto_login(); // I simplified the code here, but you get the idea
}
}
}
mymodule.services.yml
services:
mymodule.event_subscriber:
class: Drupal\mymodule\EventSubscriber\MyModuleEventSubscriber
arguments: ['@current_route_match', '@externalauth.externalauth', '@current_user']
tags:
- { name: event_subscriber }
これは、匿名ユーザーのページをキャッシュするモジュール「内部ページキャッシュ」のように見えます。このキャッシュは、イベントの前にミドルウェアとして実行されます。
あなたの場合、このモジュールは必要なく、アンインストールすることができます。
干渉する他のコードがある場合は、イベントサブスクライバーに設定した優先度でこれを制御できるはずです。