扩展中的文件导入

File Import in an extension

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

$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();

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

我也在 domain/model 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
                }
            }
        }
    }
}

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

自 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