Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Fluid中显示登录的TYPO3前端用户的全名_Typo3_Fluid_Typo3 9.x - Fatal编程技术网

在Fluid中显示登录的TYPO3前端用户的全名

在Fluid中显示登录的TYPO3前端用户的全名,typo3,fluid,typo3-9.x,Typo3,Fluid,Typo3 9.x,任务非常简单:我想在Fluid中显示当前TYPO3前端用户的全名(名字和姓氏)。但不知何故,TYPO3(9.5版)或Fluid似乎在缓存数据,因此登录的前端用户有时会看到其他登录用户的名称 目前的执行情况: 打字稿: lib.username = USER_INT lib.username.userFunc = Vendor\Extension\UserFunc\Username->getUsername <f:render partial="Header" s

任务非常简单:我想在Fluid中显示当前TYPO3前端用户的全名(名字和姓氏)。但不知何故,TYPO3(9.5版)或Fluid似乎在缓存数据,因此登录的前端用户有时会看到其他登录用户的名称

目前的执行情况:

打字稿:

lib.username = USER_INT
lib.username.userFunc = Vendor\Extension\UserFunc\Username->getUsername
<f:render partial="Header" section="Top" />
<f:section name="Top">
  <img src="logo.png">
  <f:render partial="Navigation" />
</f:section>
这是一个
用户\u INT
,因此输出应始终处于未缓存状态

流体布局-
Default.html

lib.username = USER_INT
lib.username.userFunc = Vendor\Extension\UserFunc\Username->getUsername
<f:render partial="Header" section="Top" />
<f:section name="Top">
  <img src="logo.png">
  <f:render partial="Navigation" />
</f:section>
流体部分-
Navigation.html

<f:security.ifAuthenticated>
  <f:then>
    <p>Logged in as: <f:cObject typoscriptObjectPath="lib.username" /></p>
  </f:then>
  <f:else>
    <p>Not logged in</p>
  <f:else>
</f:security.ifAuthenticated>

以以下身份登录:

未登录

为什么
cObject
的结果会被缓存?因为
lib.username
是一个
USER\u INT
,所以这不应该总是按请求计算吗?我还尝试向模板添加
f:cache.disable
ViewHelper,但没有成功

为了解决这个问题,我对它进行了重构,使用JavaScript XHR请求将fe_用户的全名提取到一个简单的PSR-15中间件。这真的是唯一合适的解决方案还是我遗漏了什么


更新17.12.2020


这一切都很好。我刚刚在我的userFunc中发现了一个输入错误,这导致了意外的行为。

发生这种情况是因为TYPO3缓存与前端用户组而不是前端用户一起工作。因此,您将看到缓存的用户组列表的结果,而不是当前用户的结果


使用
从EXT:vhs呈现未缓存的代码部分。或者,您可以修改TYPO3缓存以使用当前用户,但这可能会降低缓存性能并严重增加缓存项的数量。

请注意,即使用户INT和COA INT也存在缓存问题,请参阅

您只能使用打字稿,例如:

lib.username = COA_INT
lib.username {
  10 = TEXT
  10.data = TSFE:fe_user|user|first_name
  10.wrap = |&nbsp;

  20 = TEXT
  20.data = TSFE:fe_user|user|lastname_name
}

为什么要用打字稿?它所能带来的回报非常有限。我刚刚完成了一个教程,其中可以使用ViewHelper添加一个ExtBase变量,该变量在前端分配整个用户对象,并且可以在任何地方使用它,处理所有关系,甚至图像,这很难通过打字脚本获得

致意


share edit delete flag

Oehm,但正如@derhansen所写的那样,
USER_INT
对象永远不应该被缓存-独立于Feuser或fegroups…已经有一个类似的问题: