首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在会话期间保存用户输入的最佳实践Drupal 8

在会话期间保存用户输入的最佳实践Drupal 8
EN

Stack Overflow用户
提问于 2017-05-09 21:28:59
回答 2查看 964关注 0票数 0

我正在与Drupal8的一个网站工作。我想知道有什么好的做法来存储特定于用户的数据,这对会话的长度很重要。举个例子,假设一个用户是一所学校的学生,正在上不同的课程。登录后,用户选择一个课程,然后只能看到所有的内容/其他学生/.这个特别的课程。

我能想到的最简单的解决方案就是将数据存储在$_SESSION对象中。但是,drupal中的所有视图都必须从这个对象读取数据,据我所知,这在Drupal7中使用自定义php代码是可能的,但在Drupal8视图中不再是这样。

此外,如果我想永久地存储用户的默认首选项,我可以创建一个自定义内容类型“user_config_data”或类似的内容类型,其中存储对当前会话非常重要的信息(需要在每个视图中访问等),也可以存储默认选择的值(即用户希望在登录后将其视为默认的过程)。

后者可能也可以通过cookie实现?!

还有什么我没想过的?

在性能、良好的编码实践和可修改性方面,这些方法中是否有更多/更少的优势?谢谢你对这件事的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-11 07:13:17

PrivateTempStore是你要找的东西。您可以使用它来存储整个会话中每个用户的数据。

你可以这样用它

代码语言:javascript
复制
$tempStoreService = \Drupal::service('user.private_tempstore');

// Set a variable in the tempstore
$tempStoreService->set('user_data', $data);

// Get a variable from the tempstore
$userData = $tempStoreService->get('user_data');

这适用于用户的整个会话。如果您需要在用户之间共享数据,可以使用SharedTempStore

票数 1
EN

Stack Overflow用户

发布于 2017-05-13 18:44:33

我对此做了更多的阅读,现在我正在使用$tempStoreService,如VJamie所示。为了使参数在Drupal 8视图中可用,我创建了一个定制模块来实现hook_views_pre_view(),并将我的值作为参数添加到视图中。然后,我在视图中使用上下文过滤器来确保参数被使用。但是,视图的预览工作得很好,但是在实际页面上,视图将被缓存,并且无论我给出什么参数,输出都是相同的。只有当禁用整个视图的缓存时,它才能工作。这是一种标准方法,还是对上下文过滤器的缓存问题有不同的解决方案?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43880155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档