为什么TYPO3 9.5.x Fluid Viewhelper f:security仅在Default.html中有效,



在TYPO3 9.5.x中,此代码在我的extbase扩展的Layout/Default.html模板中工作。但同样的代码在任何其他模板中都不起作用,例如List.html模板。当我在那里使用viewhelper时,我不会得到任何输出。在TYPO3 8.x中,它适用于每个模板,而不仅仅适用于Default.html。这有充分的理由吗?如何在不是Layout/Default.html的部分和模板中使用f:security?

<f:security.ifHasRole role="2">
<f:then>
<p>CHECK RIGHTS role=2</p>
</f:then>
<f:else>
<p>CHECK RIGHTS role=not2</p>
</f:else>
</f:security.ifHasRole>

与此代码相同,所以它与f:else:无关

<f:security.ifAuthenticated>
<p>I AM LOGGED IN, but it does not show up :( </p>
</f:security.ifAuthenticated>

Layout/Default.html:

<html xmlns:f="https://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:security.ifHasRole role="2">
<p>ROLE is 2 in Default.html, this  gets rendered as expected</p>
</f:security.ifHasRole>
<div class="container">
<f:debug title="Debug" maxDepth="12">{_all}</f:debug>
<f:render section="content" />
</div><!-- /container -->
</html>

Templates/Statistic/List.html

<html xmlns:f="https://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:layout name="Default" />
This Template is responsible for creating a table of domain objects.
If you modify this template, do not forget to change the overwrite settings
in /Configuration/ExtensionBuilder/settings.yaml:
Resources:
Private:
Templates:
List.html: keep
Otherwise your changes will be overwritten the next time you save the extension in the extension builder
<f:section name="content">
<h3>Anruf-Statistiken</h3>
<f:flashMessages />
<div style="float:right; clear:both;"><f:link.action action="export" controller="Statistic" pluginName="Run"><button type="button" class="btn btn-xs btn-default">Tabelle für Excel speichern (CSV-Export)</button></f:link.action></div>

<table style="padding: 1em; margin-top:2em; width:100%;" class="tx_srv2" >
<tr>
<th style="padding: 1em;">ID</th>
<th style="padding: 1em;">Timestamp</th>
<th style="padding: 1em;"><f:translate key="tx_srv2_domain_model_statistic.agent" /></th>
<th style="padding: 1em;"><f:translate key="tx_srv2_domain_model_statistic.status" /></th>
<th style="padding: 1em;"><f:translate key="tx_srv2_domain_model_statistic.campaigntitle" /></th>
<th style="padding: 1em;"><f:translate key="tx_srv2_domain_model_statistic.duration" /> (sec.)</th>
<th style="padding: 1em;"><f:translate key="tx_srv2_domain_model_statistic.comment" /></th>
</tr>
<f:widget.paginate objects="{statistics}" configuration="{itemsPerPage: 10, insertBelow:1}" as="paginatedStatistics">
<f:for each="{paginatedStatistics}" as="statistic">
<tr>
<td style="padding: 1em;">{statistic.uid}</td>
<td style="padding: 1em;"><f:format.date format="Y-m-d H:i:s">{statistic.crdate}</f:format.date></td>
<td style="padding: 1em;">{statistic.agent.username}</td>
<td style="padding: 1em;">{statistic.status}</td>
<td style="padding: 1em;">{statistic.campaigntitle}</td>
<td style="padding: 1em;">{statistic.duration}</td>
<td style="padding: 1em;">{statistic.comment}</td>
</tr>
</f:for>
</f:widget.paginate>
</table> 
<f:security.ifAuthenticated>
<f:then>
This part should be shown if there is a frontend user logged in, but it never shows up.
</f:then>
<f:else>
This part should be shown if the current user is not logged in., but it also doesnt show up.
</f:else>
</f:security.ifAuthenticated>
</f:section>
</html>

在前端,List.html中的f:security部分中没有任何内容被渲染,但Default.html中的f:security部件被渲染。List.html的常规输出,即对象列表,将按预期进行渲染。

在TYPO3 9.5.x中,ViewHelper似乎只返回布尔值,而不呈现"then"或"else"标记。这对我有效:

<f:if condition="{f:security.ifHasRole( role: '9')}">
<f:then>
yes
</f:then>
<f:else>
no
</f:else>
</f:if>

用法看起来非常好。

f:securityViewHelper仅在前端工作。如果您在后端范围内,则需要使用f:be.security等效项。如果这还不能解决问题,你能提供使用故障ViewHelper的模板代码吗?

在9.5.2中遇到了这个问题,检查角色不是一个选项,以下是我如何在vhs扩展的帮助下解决这个问题:

<f:security.ifAuthenticated>
<f:then>
<v:variable.set name="isLoggedIn" value="true"/>
</f:then>
</f:security.ifAuthenticated>
<f:if condition="{isLoggedIn}">
<f:then>### Logged In ###</f:then>
<f:else>### Not Logged In ###</f:else>
</f:if>

这里的技巧是Viewhelper能够执行f:then块中的操作,但不能执行f:else块中的任务,所以我创建了一个仅在f:then块中设置的变量,然后检查该变量。

相关内容

  • 没有找到相关文章

最新更新