У меня есть гипотетическое расширение Zoo
, в котором есть модель Animal
с полем photo
и плагин FrontEnd (FE) с типичными действиями CRUD. Поле photo
является типичным полем FileReference
FAL и отлично работает в бэкенде (BE) с общей конфигурацией TCA IRRE.
Я могу успешно загрузить файл в хранилище, он виден в модуле Filelist, и я могу использовать его в BE во время редактирования Animal, в любом случае я не могу создать FileReference
в своем плагине FE. .
Мой текущий подход выглядит следующим образом:
/**
* @param \Zoo\Zoo\Domain\Model\Animal $animal
*/
public function updateAction(\Zoo\Zoo\Domain\Model\Animal $animal) {
// It reads proper uploaded `photo` from form's $_FILES
$file = $this->getFromFILES('tx_zoo_animal', 'photo');
if ($file && is_array($file) && $file['error'] == 0) {
/** @type $storageRepository \TYPO3\CMS\Core\Resource\StorageRepository */
$storageRepository = GeneralUtility::makeInstance('\TYPO3\CMS\Core\Resource\StorageRepository');
$storage = $storageRepository->findByUid(5); // TODO: make target storage configurable
// This adds uploaded file to the storage perfectly
$fileObject = $storage->addFile($file['tmp_name'], $storage->getRootLevelFolder(), $file['name']);
// Here I stuck... below line doesn't work (throws Exception no. 1 :/)
// It's 'cause $fileObject is type of FileInterface and FileReference is required
$animal->addPhoto($fileObject);
}
$this->animalRepository->update($animal);
$this->redirect('list');
}
в любом случае попытка создать ссылку по этой строке вызывает исключение:
$animal->addPhoto($fileObject);
Как я могу решить эту проблему?
Отмечено: подход DataHandler
(ссылка) также не будет работать, так как он недоступен для пользователей FE.
TL;DR
Как добавить FileReference
в Animal
модель из существующей (только что созданной) записи FAL?
uploadAction
, поскольку он использует общий преобразователь типов для преобразования вашего загруженного файла (или файлов) в объект, который непосредственно используется при создании вашегоAnimal
модель. Отлично работает как в FE, так и в BE. - person derhansen   schedule 25.02.2015