web-dev-qa-db-ja.com

特定のノードタイプまたはパスでEventSubscriberが呼び出されました

外部サーバーから一部のデータを読み込み、それをjavascript div要素に出力する関数を起動するイベントを設定しようとしています。私は多くの方法を試しましたが、このイベントを特定のノードタイプでのみ呼び出されるようにする方法がわかりません。

私がこれまでに得たコード:

class eSubscriber implements EventSubscriberInterface {

  public static function getSubscribedEvents() {
    $events[KernelEvents::RESPONSE][] = ['onRespond',27]; //so far it works on respond but on every page
    return $events;
  }

  public function onRespond(FilterResponseEvent $event) {
    //do some stuff
  }

}
1
karoluS

なんとかやりましたが、もっとうまくできると思います。

class eSubscriber implements EventSubscriberInterface {

  public static function getSubscribedEvents() {
    $events[KernelEvents::TERMINATE][] = ['onRespond',27];
    return $events;
  }

  public function onRespond(PostResponseEvent $event) {
    $node = \Drupal::routeMatch()->getParameter('node');
    $user = \Drupal::currentUser();
    $name = $user->getUsername();

    $output = [];
    if (isset($node) && isset($name)) {

      $nodeType = $node->getType();
      $soap_response = new classThatHandleRequests();
      $output = $soap_response -> get_clients_fv($name);
      echo('<script>var JSONarray = ' . print_r($output,1) . ';</script>');
    }
  }
}
1
karoluS