Я использую Typo 7.2 и ищу ответ на следующий вопрос:
Как программно добавить созданный файл как FileReference в модель расширения?
Сначала немного информации о моих достижениях / попытках.
ГОТОВО. Командный контроллер запускает папки, ищет конкретное изображение и создает размытый файл с помощью графических функций. Сгенерированный файл добавляется в хранилище как отдельный простой файл и отображается в таблице sys_file.
$fileObject = $posterStorage->addFile(
$convertResult[3],
$posterStorage->getFolder($blurFolderName),
$newFileName);
ЧАСТИЧНО СДЕЛАНО. Теперь мне нужно добавить сгенерированный файл в качестве ссылки на мою модель. Проблема в том, что я могу это сделать, но только взломав ядро - что неприемлемо - и не могу сделать это правильно. Модель говорит:
public function addPosterWebBlur(
\TYPO3\CMS\Extbase\Domain\Model\FileReference $posterWebBlur
) {
$this->posterWebBlur->attach($posterWebBlur);
}
Итак, мне удалось расширить класс FileReference:
class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference {
public function setFile(\TYPO3\CMS\Core\Resource\File $falFile) {
$this->$uidLocal = (int)$falFile->getUid();
}
}
Ссылка не устанавливается, и я просто получаю следующую ошибку в бэкэнде:
Table 'db_name.tx_ext_name_domain_model_filereference' doesn't exist.
ОБНОВЛЕНИЕ После интеграции данных от Frans в ext_typoscript_setup.txt, модель может быть сохранена, создает запись sys_file_reference и прекрасно работает в серверной части. Но есть несколько возможностей удовлетворить все потребности:
- Таблица sys_file_reference не содержит значения для table_local, тогда как все записи, созданные внутренним пользователем, содержат sys_file как значение.
- То же самое относится к l10n_diffsource, который содержит некоторый большой двоичный объект. Эта запись вставляется в таблицу sys_file_reference после сохранения записи вручную через бэкэнд.
- Идентификатор pid для file_reference должен быть установлен через setPid ($ model-> getPid ()), это нормально?
- Cruser_id всегда равен нулю. Это правильный способ?
- При попытке удалить файл (который был добавлен в модель с возможностями бэкэнда) через файловый менеджер я получаю предупреждение, что ссылки на этот файл существуют. Это не относится к программно добавленной fileReference. Также ссылки, перечисленные под файлом (при нажатии на «Информация» для сгенерированного файла в серверном файловом менеджере), не отображаются в списке. Они попадают в список, когда я вручную ввожу значение "sys_file" в таблицу sys_file_reference.
- Поскольку пример Хельмута Хуммелса содержит дополнительные данные, мне интересно, не пропущу ли я что-то.
- Ссылка на файл используется внутри хранилища объектов, но поскольку функция addImage вызывает только objectStorage-> attach, я думаю, что это должно быть нормально, и никаких дополнительных действий objectStorage не требуется. Правильный?