我是Drupal的新手,我想在Drupal8中创建一个自定义模块。 我已经开发了模块,但是有一些问题需要解决。
当向用户显示包含模块的页面时,模块显示GET参数值。
例如,我与http://localhost/drupal/?keyword=banana连接,模块显示“banana”。
但在上述之后,当我再次与http://localhost/drupal/?keyword=apple连接时,模块也显示“香蕉”。
换句话说,当我第一次显示包含模块的页面时,模块运行良好,而当我连接第二个,第三个等等时,该模块工作正常。
我已经测试过一些模块中的build和build()方法只被调用一次。 所以,我认为当我连接到页面时模块只渲染一次,并且在第一次模板之后无法渲染。
另外,我认为它可能是与缓存相关的问题,但我将admin / configuration / performance / cache设置为“no-cache”。
我不确定在模块显示“banana”之后是否可以显示“apple”。
请帮帮我,让我知道更多细节......
感谢。
答案 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];
}