Drupal 8块缓存

时间:2020-03-05 15:25:33  来源:igfitidea点击:

在Drupal8和Drupal7中,定制块缓存的方法是不同的。
在Drupal8中,所有可渲染数组都是可缓存的,甚至那些由自定义块返回的数组也是可缓存的。

示例:

  • 一些昂贵的计算数据取决于活动主题:不同主题的不同结果。然后你会因主题缓存上下文的不同而有所不同。
  • 创建显示个性化消息的渲染数组时,渲染数组会因用户而异。然后根据用户缓存上下文改变(渲染数组)。
  • 一般来说,当一些昂贵的计算信息因某些环境背景而变化时。

然后根据缓存上下文而变化。

drupal8中新的和改进了很多的cacheapi提供了一种复杂的方法来缓存所有可呈现项,无论是页面、实体还是块。
Drupal8允许开发人员直接在块对象的"build()"方法返回的渲染数组中管理块的缓存行为。

function mymodule_block_info() {
  $blocks = array();
  $blocks['mymodule_example_block'] = array(
    'info' => t('Block title'),
    //Block caching options (per role, per user, etc.)
    //DRUPAL_NO_CACHE is the default.
    'cache' => DRUPAL_NO_CACHE,
  );
  return $blocks;
}

在Drupal 7中,按角色缓存块如下所示:

class MyCustomBlock extends BlockBase {
  public function build() {
    return array(
     '#markup' => $markup,
       '#cache' => array(
         'contexts' => array(
         'url.path',
        ),
      ),
    );
  }
}

在Drupal 8中,缓存设置直接在块的build()方法返回的可渲染数组中操作:

用于操纵缓存设置的可用参数包括"keys"、"contexts"、"tags"、"max age"和"bin"。

Drupal 8核心的缓存上下文:

cookies
  :name
headers
  :name
ip
languages
  :type
request_format
route
  .book_navigation
  .menu_active_trails
    :menu_name
  .name
session
  .exists
theme
timezone
url
  .host
  .query_args
    :key
    .pagers
      :pager_id
  .path
  .site
user
  .is_super_user
  .node_grants
    :operation
  .permissions
  .roles
    :role