Typo3 7.2 добавить ссылку на файл в модель расширения
Я использую Typo 7.2 и ищу ответ на следующий вопрос:
Как программно добавить созданный файл в качестве FileReference в модель расширения?
Сначала немного информации о моих достижениях / попытках.
СОВЕРШЕНО Командный контроллер запускает папки, ищет определенное изображение и создает размытый файл с помощью GraphicFunctions. Созданный файл добавляется в хранилище как отдельный простой файл и отображается в таблице 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 не требуется. Правильный?
2 ответа
Вы должны указать постоянному слою extbase использовать правильную таблицу. Смотрите, например, этот пример https://github.com/helhum/upload_example/blob/master/ext_typoscript_setup.txt
грамм Frans
Попытка ответить 1) См. https://github.com/helhum/upload_example/blob/master/Configuration/TCA/tx_uploadexample_domain_model_example.php Вероятно, вам следует проверить определение TCA для вашего поля posterWebBlur. Второй параметр getFileFieldTCAConfig() TT