Drupal 8自定义块模块上的缓存问题显示IP地址

时间:2017-01-12 21:54:10

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

我创建了一个简单的自定义块模块,显示访问网站的用户的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);
  }
}

1 个答案:

答案 0 :(得分:0)

您可以向渲染数组添加缓存上下文。有一个 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',
        ],
      ],
    ];
  }
  
}