模块在drupal中呈现的时间是什么时候?

时间:2017-07-28 02:13:40

标签: caching drupal module

我是Drupal的新手,我想在Drupal8中创建一个自定义模块。 我已经开发了模块,但是有一些问题需要解决。

当向用户显示包含模块的页面时,模块显示GET参数值。

例如,我与http://localhost/drupal/?keyword=banana连接,模块显示“banana”。

但在上述之后,当我再次与http://localhost/drupal/?keyword=apple连接时,模块也显示“香蕉”。

换句话说,当我第一次显示包含模块的页面时,模块运行良好,而当我连接第二个,第三个等等时,该模块工作正常。

我已经测试过一些模块中的build和build()方法只被调用一次。 所以,我认为当我连接到页面时模块只渲染一次,并且在第一次模板之后无法渲染。

另外,我认为它可能是与缓存相关的问题,但我将admin / configuration / performance / cache设置为“no-cache”。

我不确定在模块显示“banana”之后是否可以显示“apple”。

请帮帮我,让我知道更多细节......

感谢。

1 个答案:

答案 0 :(得分:0)

根据您的约束,有几种可能的解决方案:禁用此特定页面的缓存,或使用路由通配符。

您可以使用页面缓存终止服务来禁用特定页面上的缓存,您可以在控制器中触发此服务:

\Drupal::service('page_cache_kill_switch')->trigger();

这将仅针对此特定请求禁用缓存,因此您不会看到过时内容的效果。

如果可能,更好的解决方案是使用路由参数而不是GET参数。这将允许您缓存单独的URL(例如页面/香蕉,页面/苹果等),并仍然显示您希望它们的内容。例如,在module.routing.yml文件中:

mymodule.route:
  path: '/path/{parameter}'
  defaults:
    _controller: '\Drupal\mymodule\Controller\MyModuleController::page'
    _title: 'My Module Page'
  requirements:
    _permission: 'access content'

然后可以在控制器中访问{parameter}参数,如下所示:

public function page($parameter) {
  return ['#markup' => $parameter];
}

更多信息:https://www.drupal.org/node/2186285