Рейтинг:1

Внедрение службы в другую службу не работает

флаг jm

я должен переопределить кэш страниц service, чтобы иметь некоторую пользовательскую логику проверки, которая будет выполняться для анонимных пользователей. Дело в том, что у меня есть домен обслуживание модуля домен.переговорщик быть введенным в кэш страниц службы, но когда я звоню в домен.переговорщик обслуживание это всегда ноль Неважно что я делаю. Я думаю, что это связано с чем-то с приоритетом. Я могу подтвердить, что переопределенная служба выполняется.

Код для переопределения Кэш страницы оказание услуг

/**
   * {@inheritdoc}
   */
  общедоступная функция изменить (ContainerBuilder $ контейнер) {
    // Переопределяет класс language_manager для проверки согласования языка домена.
    $definition = $container->getDefinition('http_middleware.page_cache');
    $definition->setClass('Drupal\hcl_login\StackMiddleware\StaticCache')->addArgument(
      новая ссылка('domain.negotiator'),
    );
  }

Переопределенная служба

/**
   * {@inheritdoc}
   */
  дескриптор публичной функции (запрос $request, $type = self::MASTER_REQUEST, $catch = TRUE): ответ {
    $domain = \Drupal::service('domain.negotiator');
    $x = $this->domainNegotiator->getActiveDomain();
    $currentDomain = \Drupal::service('entity_type.manager')->getStorage('domain')->createHostname();
    $response = parent::handle($request, $type, $catch);
    вернуть $ответ;
  }

4uk4 avatar
флаг cn
Даже если это выглядит как служба, промежуточное программное обеспечение не является службой Drupal, оно работает вне ядра Drupal.
Jaswin Singh avatar
флаг jm
Спасибо, @4k4 за ответ, есть ли обходной путь для достижения этой цели. Первоначально я использовал подписку на событие KERNAL::REQUEST, чтобы добавить пользовательскую логику проверки, которая должна запускаться на каждой отдельной странице для анонимных пользователей, но из-за кэширования drupal страницы кэшировались, и это было невозможно.
4uk4 avatar
флаг cn
Обходной путь для чего? Кэш страницы похож на кеширование обратного прокси-сервера на основе URL-адреса (включая, кстати, имя домена и строку запроса). Если это не то, что вам нужно, удалите этот модуль и используйте динамический кеш страниц.
leymannx avatar
флаг ne
Как насчет `$request->getHost()` или `$request->getSchemeAndHttpHost()`?
Jaswin Singh avatar
флаг jm
@leymannx Тем не менее, мне нужно проверить службу пользователей, которая всегда показывает анонимных пользователей, я пробовал с подписчиком событий, но когда я установил приоритет 210, я не могу получить доступ к службе.
Jaswin Singh avatar
флаг jm
Другая проблема заключается в том, что при использовании подписчиков на события страницы кэшируются, и пользовательская проверка не выполняется каждый раз.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.