Drupal → Изменение результата ajax запроса на примере выполнения своей ajax-команды при установке/снятии флага

09.09.2022

Пример добавления ajax-команды при установке/снятия флага модулем Flag.

// src/ModulenameEventSubscriber.php

class ModulenameEventSubscriber implements EventSubscriberInterface {

  /**
   * {@inheritDoc}
   */
  public static function getSubscribedEvents(): array {
    $events[KernelEvents::RESPONSE][] = ['onKernelResponse'];
    return $events;
  }

  /**
   * KernelEvents::RESPONSE event callback.
   */
  public function onKernelResponse(ResponseEvent $event): void {
    if (in_array(\Drupal::routeMatch()->getRouteName(), ['flag.action_link_flag', 'flag.action_link_unflag'])) {
      $response = $event->getResponse();
      if ($response instanceof AjaxResponse) {
        $response->addCommand(new AlertCommand('Altered!'));
      }
    }
  }

}
# modulename.services.yml

services:
  modulename.event_subscriber:
    class: Drupal\modulename\ModulenameEventSubscriber
    tags:
      - { name: event_subscriber }

Так же для изменения ajax ответа есть хук hook_ajax_render_alter(), но он выполняется уже после сборки ассетов, т.е. будет игнорировать атачи, которые вы нагенерили.

Написанное актуально для
Drupal 9+
Похожие записи

Добавить комментарий