1

我使用通过 JSON 从另一个应用程序将文件导入 TYPO3。导入的文件保存在特定的存储中。相关记录在 sys_file 中创建。到目前为止,一切看起来都不错。现在我想将导入的文件添加到某个表中。为此,我根据 NewsImportService.php 使用新闻扩展 V8.5.2 的方法。有一个函数 hydraNewsRecord() 可以建立媒体(文件)关系。因此我使用以下代码:

$media = $objectManager->get(\Zhaw\ZhawContinuingEducation\Domain\Model\FileReference::class);
$media->setFileUid($file->getUid());
\\ add new file to field
$newCourse->addContactImage1($media);
...
\\ add to table course
$courseRepo->add($newCourse);
...
$persistenceManager->persistAll();

在测试期间我总是得到错误(由于持久性管理器):表'typo3_www.tx_zhawcontinuingeducation_domain_model_filereference'不存在

我还包含在域/模型 FileReference.php 下并添加到 setup.typoscript 中:

objects {
        TYPO3\CMS\Extbase\Domain\Model\FileReference.className = Zhaw\ZhawContinuingEducation\Domain\Model\FileReference
}
persistence {
    storagePid =
    classes {
        Zhaw\ZhawContinuingEducation\Domain\Model\FileReference {
            mapping {
                tableName = sys_file_reference
                columns {
                    uid_local.mapOnProperty = originalFileIdentifier
                }
            }
        }
    }
}

表 tx_zhawcontinuingeducation_domain_model_filereference 不是必需的,因为它已经存在于核心中。有谁知道,我错过了什么?

4

1 回答 1

2

自 TYPO3 10.0 以来,不再可能在 TypoScript 中映射模型类。您需要在EXT:extension/Configuration/Extbase/Persistence/Classes.php扩展程序中添加一个包含以下内容的文件:

<?php
declare(strict_types = 1);

return [
    \Zhaw\ZhawContinuingEducation\Domain\Model\FileReference::class => [
        'tableName' => 'sys_file_reference',
        'properties' => [
            'originalFileIdentifier' => [
                'fieldName' => 'uid_local'
            ],
        ],
    ],
];

有关此的更多信息,您可以在此处找到:https ://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/10.0/Breaking-87623-ReplaceConfigpersistenceclassesTyposcriptConfiguration.html

于 2021-03-16T11:03:48.873 回答