Я помню, что всегда было трудно установить связь 1:1 между моделью предметной области и FileReference. Я предлагаю вам использовать существующие шаблоны и работать с ObjectStorage для этой цели.
Вы можете скопировать необходимый TCA из существующего tca таблицы tt_content (например, изображение поля). Аннотация свойства должна выглядеть так:
/**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Extension\Domain\Model\FileReference>
* @lazy
* @cascade remove
*/
protected $propName;
Конечно, вы должны создать модель FileReference в своем собственном пространстве имен. Но вы можете расширить базовую модель Extbase, поэтому вам не нужно писать какие-либо методы.
Чтобы сопоставить вашу модель с таблицей sys_file_reference, вы должны добавить некоторый типографский текст.
Для этого создайте ext_typoscript_setup.txt в папке расширений и вставьте следующий код (настройте пространство имен и имя модели)
config.tx_extbase.persistence.classes {
Vendor\Extension\Domain\Model\FileReference.mapping {
tableName = sys_file_reference
}
}
После очистки кешей в инструменте установки (и, конечно, переноса базы данных) он должен работать.
Пояснения:
@lazy: Typo3 не будет извлекать все ссылки сразу, только при доступе к свойству.
@cascade remove: Extbase удалит все записи sys_file_reference, относящиеся к вашей модели домена, после удаления модели.
person
Philipp Wrann
schedule
06.07.2017