【问题标题】:Caching issue on Drupal 8 custom block module displaying IP Address显示 IP 地址的 Drupal 8 自定义块模块上的缓存问题
【发布时间】:2017-05-28 04:17:23
【问题描述】:

我创建了一个简单的自定义块模块,用于显示访问网站的用户的 IP 地址。当站点获得访问者时,该访问者会在块中看到他们自己的 IP 地址。我不需要存储此信息或将其用于任何其他目的,这仅用于美学目的,因此只需要块插件。该模块工作正常并显示 IP,但是,它被缓存并且 IP 不会更新,除非我手动访问性能页面并清除站点缓存。如何覆盖它以便访问者看到他们当前的 IP 地址?

这是我的自定义块模块文件:

<?php

namespace Drupal\tester\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Symfony\Component\HttpFoundation\Request;

class newid extends BlockBase {

/**
   * {@inheritdoc}
   */
  public function build() {
    $request = \Drupal::request()->getClientIp();
    return array('#markup' => $request);
  }
}

【问题讨论】:

    标签: php caching drupal drupal-modules drupal-8


    【解决方案1】:

    您可以向渲染数组添加缓存上下文。有一个IP Cache Context。要使用的 ID 只是 ip

    试试这个:

    <?php
    
    namespace Drupal\tester\Plugin\Block;
    use Drupal\Core\Block\BlockBase;
    use Symfony\Component\HttpFoundation\Request;
    
    class newid extends BlockBase {
    
      /**
       * {@inheritdoc}
       */
      public function build() {
        $request = \Drupal::request()->getClientIp();
        return [
          '#markup' => $request,
          '#cache' => [
            'contexts' => [
              'ip',
            ],
          ],
        ];
      }
      
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-11
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多