基本的なイベントサブスクライバーを作成しようとしていますが、services.ymlファイルを追加し、_drush cr
_を使用してキャッシュを再構築しようとすると、このエラーが発生します。
Drupal.phpの130行目:
_
\Drupal::$container
_はまだ初期化されていません。\Drupal::setContainer()
は、実際のコンテナで呼び出す必要があります。
Drupalからキャッシュをクリアすると正常に動作しますが、Drushは常にエラーになります。 servicesファイルを削除すると、Drushは再び正常に動作します。
誰かこれを見たことがある?これを解決せずに前進したくない。このプロジェクトでは、以前に問題なくサービスとイベントサブスクライバーを追加しました。スペーシング構造などを再確認しました。
_services:
gary_custom.custom_event_subscriber:
class: Drupal\gary_custom\EventSubscriber\CustomEventSubscriber
tags:
- { name: event_subscriber }
_
_namespace Drupal\gary_custom\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
class CustomEventSubscriber implements EventSubscriberInterface {
/**
* {@inheritdoc}
*/
static function getSubscribedEvents() {
\Drupal::logger('debug')->debug('get sub events');
$events[KernelEvents::REQUEST][] = array('checkForRedirection');
return $events;
}
/**
* This method is called whenever the KernelEvents::REQUEST event is
* dispatched.
*
* @param GetResponseEvent $event
*/
public function checkForRedirection(GetResponseEvent $event) {
\Drupal::logger('debug')->debug('hitting');
}
}
_
Drush 9.4.0を使用しています。
問題はgetSubscribedEvents
のログ行です:
\Drupal::logger('debug')->debug('get sub events');
Drupal::logger
はコンテナーにサービスを照会しますが、コンテナーは、イベントサブスクライバーのディスカバリーが発生した時点では設定されていません。
イベントハンドラーが呼び出されるときまでに、コンテナーは初期化されているので、checkForRedirection
へのログインは正常に機能するはずです。