TYPO3: Как использовать загрузку файлов с помощью extbase?

Я создаю простое расширение на основе extbase / fluid, которое имеет форму загрузки в подключаемом модуле внешнего интерфейса. Он работал в 6.0.4, но теперь я получаю следующее исключение, когда пытаюсь загрузить файл:

# 1297759968: Исключение при сопоставлении свойств в пути свойства "fichier": не найден преобразователь, который можно использовать для преобразования из "массива" в "строку".

Проблема, похоже, связана с тем, что веб-запрос получает массив для загруженного файла, но модель сохраняет его в виде строки. Как мне избавиться от этого исключения? Как мне обрабатывать загрузку файлов в extbase?


Расширение было запущено с использованием Extension Builder. fichier - это строковое свойство в модели, содержащее имя загруженного файла (расположенного в uploads/tx_myext/). Шаблон для подключаемого модуля содержит сборку поля загрузки из form.upload ViewHelper. В TYPO3 6.0.4, когда я отправляю форму, я получаю объект в качестве аргумента функции createAction. Из этого объекта я вызываю getFichier, который возвращает мне файловый массив загруженного файла. Затем я могу извлечь исходное имя файла, скопировать временный файл в нужное место и установить значение свойства fichier, используя исходное имя файла.

Теперь, в TYPO3 6.1.0, я получаю указанное выше исключение перед входом в функцию createAction. Мой гость в том, что PropertyMapper пытается преобразовать массив файлов в строку, соответствующую типу свойства fichier.

Чего я не знаю, так это то, как это работало раньше, было ошибкой, или это то, как это работает сейчас, это ошибка. И если это действительно работает так, как задумано, как я могу обрабатывать загрузку файлов в расширении extbase?


person Charles Brunet    schedule 06.05.2013    source источник
comment
вам нужно дать более подробную информацию   -  person biesior    schedule 07.05.2013
comment
Я добавил некоторые детали. Теперь стало понятнее?   -  person Charles Brunet    schedule 07.05.2013


Ответы (1)


 /**
 * initialize actions
 */
public function initializeAction() {
    if ($this->arguments->hasArgument('myModel')) {
        $this->arguments->getArgument('myModel')->getPropertyMappingConfiguration()->setTargetTypeForSubProperty('upload', 'array');
    }
}

http://www.typo3lexikon.de/typo3-tutorials/extensions/extbase/property-mapper.html

person Benjamin    schedule 07.05.2013
comment
Вероятно, стоит отметить, что initializeAction вызывается для каждого действия Контроллера, и что myModel относится к имени переменной, данной функции createAction(). - person Charles Brunet; 07.05.2013