刷新所有缓存后重建页面缓存

时间:2019-11-20 19:21:47

标签: caching drupal-8

我正在尝试构建一个事件订阅者,该事件订阅者将在“刷新所有缓存”操作(通过管理菜单)完成后触发。我要在此处完成的工作是在缓存刷新完成后循环浏览主菜单,并使用\Drupal::httpClient()请求触发每个页面的页面加载,以重建页面缓存。我正在听RoutingEvents::FINISHED,但是我并不能一直确定这是最好的聆听事件。它似乎仅在清除缓存后才会触发,但是我不确定100%知道幕后发生了什么。有可能有更好的事件可以倾听,或者有更好的方法来完成我想做的事情?

EventSubscriber供参考:

  public function onRouterFinishedScrape() {
    \Drupal::logger('cache_scraper')->notice("Caches Cleared");
    $menu_tree = \Drupal::menuTree();
    $menu_name = 'main';

    $parameters = $menu_tree->getCurrentRouteMenuTreeParameters($menu_name);

    $base = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https://' : 'http://';
    $base.= $_SERVER['SERVER_NAME'];


    $tree = $menu_tree->load($menu_name, $parameters);

    $client = \Drupal::httpClient();

    foreach ($tree as $item) {
      $url = $item->link->getUrlObject()->toString();
      try {

        $request = $client->get($base.$url);
        $request->getBody();
        \Drupal::logger('cache_scraper')->notice("Indexed: ".$base.$url);

      }catch (RequestException $exception) {
        \Drupal::logger('cache_scraper')->notice("Indexing failed on: ".$base.$url);
      }

    }
  }

  public static function getSubscribedEvents() {
     $events = [];

     // Act only when the router rebuild is finished.
     $events[RoutingEvents::FINISHED][] = [
       'onRouterFinishedScrape',
       210,
     ];
     return $events;
   }

0 个答案:

没有答案
相关问题