私はリクエストに対していくつかの静的な変数設定を行っており、KernelEvents::REQUEST
を使用して最初に実行して変数を設定することを望んでいました。
ただし、ドキュメントには次のように記載されていますが、
REQUESTイベントは、リクエストのディスパッチの最初に発生します。
hook_node_access
は実際にはKernelEvents::REQUEST
イベントハンドラの前に実行されます。
/**
* The subscribed events.
*/
public static function getSubscribedEvents() {
$events = [];
$events[KernelEvents::REQUEST][] = ['onKernelRequest', 1];
return $events;
}
次に、イベントリスナーで:
public function onKernelRequest(GetResponseEvent $event) {
drupal_set_message(__FUNCTION__ . ': ' . microtime());
}
とhook_node_access
次に、イベントリスナーで:
public function mymodule_node_accesss(NodeInterface $node, $op, AccountInterface $account) {
drupal_set_message(__FUNCTION__ . ': ' . microtime());
}
出力:
mymodule_node_access: 0.76379200 1518995630
onKernelRequest: 0.77758400 1518995630
マイクロタイムの順序からわかるように、hook_node_access
が最初に実行されます。とにかく、それをKernelEvents::REQUEST
イベントハンドラーの後に実行させるには?ありがとう。
OK、少し掘り下げた後、私は解決策を見つけました。
['onKernelRequest', 1]
の「重み」パラメーターはソートDESCであるため、重みの大きい数値が最初に実行されます。
ウェイト1000
を使用してイベントリスナーを次のように調整すると、hook_node_access
を呼び出すリスナーの前に実行されます
/**
* The subscribed events.
*/
public static function getSubscribedEvents() {
$events = [];
$events[KernelEvents::REQUEST][] = ['onKernelRequest', 1000];
return $events;
}