2

大家!

在一个新的 TYPO3 8.7.10 站点中,我刚刚使用 Extension Builder 创建了一个新扩展。在该扩展中,有一个具有文件类型属性(我称之为“符号”)的模型对象(“FurnitureFamily”)。我的扩展程序还有一个插件,可以显示所有家具系列的列表。我用我的插件创建了一个家具系列和一个新页面。

Extension Builder 中的新模型对象

Extension Builder 中的新模型对象

/**
 * name
 *
 * @var string
 * @validate NotEmpty
 */
protected $name = '';

/**
 * symbol
 *
 * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 * @cascade remove
 */
protected $symbol = null;

问题是,我没有显示包含我唯一记录的列表,而是收到以下错误:

糟糕,发生错误!代码:20180219055419589a6076

fh_debug扩展的帮助下,我可以获得有关错误的更多信息:

糟糕,发生错误!代码:20180219055419589a6076“where 子句”异常代码中的未知列“sys_file_reference.uid_local:type”:1472074485 文件:/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php 行:393 fh_debug 跟踪:文件:/ Typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php" 行:226 函数:getObjectDataByQuery 文件:/typo3/sysext/extbase/Classes/Persistence/Generic/PersistenceManager.php" 行:126 函数:getObjectDataByQuery 文件:/ Typo3/sysext/extbase/Classes/Persistence/Generic/QueryResult.php" 行:113 函数:getObjectDataByQuery 文件:/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" 行:567 函数:getFirst 文件:/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" 行:503 函数:

奇怪的是,当我删除属性“符号”时,会显示列表(仅显示属性“名称”)。

作为新安装,我尝试将我的数据库与规范进行比较,但没有进行任何更改。

我的问题是:我该如何纠正这个错误?

谢谢你。

4

1 回答 1

0

这个问题已经很老了,但我在 TYPO3 版本 9 中仍然遇到这个问题,并发现它与 extension-builder 相关,它正在为 field 创建一些条目uid_local:type
错误消息只是阻止了所有内容,因为该字段没有定义类型。

在此屏幕截图中,您可以看到表中定义了具有该名称的字段sys_file_reference在此处输入图像描述

向下滚动带有表格字段的长列表可以发现如下内容: 在此处输入图像描述

可以找到一个定义,config.items其中包含一些可以选择的项目的典型定义。即使只有一个项目,该结构对于某种形式元素的选择来说也是典型的。我可以想象表单元素,如选择下拉框、单选按钮或复选框。所有这些元素都有这种代码结构作为定义。

因此,我为删除错误消息所做的只是为该字段定义一个“类型”:

$tmp_ttnews_vp_columns['uid_local:type']['config']['type'] = 'select';

另一方面,通常不会显示该字段,因为该表sys_file_reference从不遵循 extbase-logic 并且工作方式不同。所以删除文件中的一些代码非常容易和有用。
your_extension/Configuration/TCA/Overrides/sys_file_reference.php
该表中有一个包含新字段或更改字段定义的块,并且可以删除该列表上方或下方的大多数代码。

这在列定义之上,可以删除: 在此处输入图像描述

也可以删除所需代码下方的这样一个块: 在此处输入图像描述

关于该type字段的文档可以在这里找到,在底部的章节中也是关于组合符号的解释,只是不是使用 uid_local 而是使用 file: file:type

有很多情况分别详细说明了为什么它不能工作,这里是已知的情况,我可以稍后根据评论扩展列表:

  • extension-builder 创建的默认映射看起来像这样:

config.tx_extbase {
persistence {
 classes {

   WDB\TtnewsVp\Domain\Model\FileReference {
     mapping {
       tableName = sys_file_reference
       recordType = Tx_TtnewsVp_FileReference
     }
   }

 }
}
}

在这里,这条线recordType = Tx_TtnewsVp_FileReference令人不安并引发了问题中描述的错误消息。
这种 TypoScript 通常位于ext_typoscript_setup.typoscript扩展文件夹根目录下的文件中,因此它始终会被加载,即使不包含静态模板也是如此。

  • 类中的注释可能是错误的,包括诸如拼写错误之类的简单错误。注释和类型提示必须是正确的(也许缺少一个比错误更好,但我从未尝试过缺少注释或类型提示)。
于 2020-03-04T09:47:11.630 回答