升级到TYPO3 v11.5后,我在扩展后端模块中得到以下错误:
1578950324 RuntimeException
给定的页面记录无效。失踪的uid。
所以我深入挖掘了一下,发现这与使用f:be.tableList
ViewHelper有关。
在我的BE模块中,我使用ViewHelper这样:
<f:be.tableList
tableName="tx_myext_domain_model_mymodel"
storagePid="1"
fieldList="{0: 'column1', 1: 'column_2'}"
sortField="column1"
enableControlPanels="true"
clickTitleMode="edit" />
由于我将后端模块注册为'navigationComponentId' => '',
(如文档中提到的),我得到了此错误。但是页面树或其他东西在这一点上没有帮助,所以我不想展示它们。
(如果我用'navigationComponentId' => 'TYPO3/CMS/Backend/PageTree/PageTreeElement'
显示页面树,此错误消失)
原来ViewHelper通过检查PID是否在mountPoint中来检查用户是否具有访问权限。我认为这很重要,而不是一个bug。修复这个问题可能很困难,因为如果我不知道PID,如何检查mountPoint权限。(可能在ViewHelper:检查storagePid?)
但是如果你禁用了页面树,就没有PID来检查了。
所以我也发现,当前的PID被获取,而TYPO3CMSCoreUtilityGeneralUtility查找给定的id如下:
$value = $_POST[$var] ?? $_GET[$var] ?? null;
我没有找到在Extbase控制器中设置pid的方法,所以我在我的listAction中轻松地这样做了:
if( TYPO3_MODE == 'BE' ) {
// if is in the BE-module, set PID to prevent customer authentication check error
$_POST['id'] = 1;
}
(在本例中,我将PID设置为我的根页)
如果有人有更好的解决方案,不要犹豫,把它贴在这个问题上。
是否禁用了后端模块的页面树?如果是,那就是问题所在!设置inheritNavigationComponentFromMainModule => false
导致错误。