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 и прекрасно работает в бэкэнде. Но есть несколько пунктов, открытых для удовлетворения всех потребностей:

  1. Таблица sys_file_reference не содержит значения для table_local, в то время как все записи, сгенерированные внутренним пользователем, содержат sys_file в качестве значения.
  2. То же самое относится к l10n_diffsource, который содержит некоторый большой двоичный объект. Эта запись вставляется в таблицу sys_file_reference после сохранения записи вручную через бэкэнд.
  3. PID file_reference должен быть установлен через setPid($model->getPid()), это нормально?
  4. Параметр cruser_id всегда установлен на ноль. Это правильный путь?
  5. При попытке удалить файл (который был добавлен в модель с возможностями бэкенда) через файловый менеджер, я получаю предупреждение, что ссылки на этот файл существуют. Это не относится к fileReference, добавленному программно. Также ссылки, перечисленные в файле (при нажатии "Информация" для сгенерированного файла в файловом менеджере бэкэнда), не отображаются в списке. Они попадают в список, когда я вручную ввожу значение "sys_file" в таблицу sys_file_reference.
  6. Поскольку пример Хельмута Хаммелса содержит дополнительные данные, мне интересно, если я просто что-то пропустил.
  7. Ссылка на файл используется внутри хранилища объектов, но так как функция 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

Другие вопросы по тегам