在Fluid中显示登录的TYPO3前端用户的全名
任务非常简单:我想在Fluid中显示当前TYPO3前端用户的全名(名字和姓氏)。但不知何故,TYPO3(9.5版)或Fluid似乎在缓存数据,因此登录的前端用户有时会看到其他登录用户的名称 目前的执行情况: 打字稿:在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
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 = |
20 = TEXT
20.data = TSFE:fe_user|user|lastname_name
}
为什么要用打字稿?它所能带来的回报非常有限。我刚刚完成了一个教程,其中可以使用ViewHelper添加一个ExtBase变量,该变量在前端分配整个用户对象,并且可以在任何地方使用它,处理所有关系,甚至图像,这很难通过打字脚本获得
致意
share edit delete flagOehm,但正如@derhansen所写的那样,USER_INT
对象永远不应该被缓存-独立于Feuser或fegroups…已经有一个类似的问题: