0

升级到 TYPO3 v11.5 后,我的扩展后端模块出现此错误:

1578950324 运行时异常

给定的页面记录无效。缺少 uid。

所以我挖掘得更深一点,发现这与使用f:be.tableListViewHelper 有关。

在我的 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',这个错误就会消失)

4

2 回答 2

0

您是否禁用了后端模块的页面树?如果是 - 这就是问题所在!设置inheritNavigationComponentFromMainModule => false导致错误。

于 2021-12-15T08:47:00.307 回答
0

事实证明,ViewHelper 通过检查 PID 是否在 mountPoint 中来检查用户是否具有访问权限。我认为这很重要,而不是错误。解决这个问题可能很困难,因为如果我不知道 PID,如何检查 mountPoint 权限。(也许在 ViewHelper 中:检查 storagePid?)

但是如果你禁用页面树,就没有 PID 可以检查。

所以我还发现,当 TYPO3\CMS\Core\Utility\GeneralUtility 查找给定的 id 时,会获取当前的 PID,如下所示:

$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 设置为我的根页面。)

如果有人有更好的解决方案,请不要犹豫,将其发布到这个问题。

于 2021-10-30T14:06:12.523 回答