Импорт файлов в расширении

#typo3 #typo3-10.x #file-import

Вопрос:

Я использую для импорта файлов из другого приложения через JSON в TYPO3. Импортированные файлы сохраняются в определенном хранилище. Связанные записи создаются в файле sys_file. Пока все выглядит хорошо. Теперь я хотел бы добавить импортированные файлы в определенную таблицу. Для этого я использую подход расширения новостей V8.5.2 в соответствии с NewsImportService.php. Существует функция hydrateNewsRecord (), которая устанавливает связь между носителями (файлами). Для этого я использую следующий код:

 $media = $objectManager->get(ZhawZhawContinuingEducationDomainModelFileReference::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 {
        TYPO3CMSExtbaseDomainModelFileReference.className = ZhawZhawContinuingEducationDomainModelFileReference
}
persistence {
    storagePid =
    classes {
        ZhawZhawContinuingEducationDomainModelFileReference {
            mapping {
                tableName = sys_file_reference
                columns {
                    uid_local.mapOnProperty = originalFileIdentifier
                }
            }
        }
    }
}
 

Таблица tx_zhawcontinuingeducation_domain_model_filereference не нужна, поскольку она уже существует в ядре. Кто-нибудь знает, чего мне не хватает?

Комментарии:

1. Какую версию TYPO3 вы используете?

2. Ах да, я забыл упомянуть. Мы используем TYPO3 V10.4.12

Ответ №1:

Сопоставление классов моделей, подобных этому, в TypoScript, больше невозможно с версии TYPO3 10.0. Вам нужно будет добавить EXT:extension/Configuration/Extbase/Persistence/Classes.php файл в расширение со следующим содержимым:

 <?php
declare(strict_types = 1);

return [
    ZhawZhawContinuingEducationDomainModelFileReference::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

Комментарии:

1. Большое спасибо, ты сделал мой день лучше. Это помогло мне решить мою проблему. После того, как я изменил свой «старый» код, он работает как заклинание.