Ошибка в waRequestFile

1

Если мы решили создать сложный массив настроек, разделенных на группы, и в одной из групп мы положили файл с name="shop_myplugin[option][image]" то получим ошибку

File error code must be integer.

Т.к. в этом случае $error вместо числа 0 будет иметь значение array('image' => 0)

Т.е. это уже не число, а массив. Ошибку генерирует метод setData

protected function setData($name, $type, $size, $tmp_name, $error)
{
if (!is_int($error)) {
throw new waException('File error code must be integer.');
}

Можно конечно закостылировать и не использовать многомерные массивы в настройках, если мы хотим работать с файлами, но, имхо, это баг, который требует исправления.

6 комментариев

  • +2

    А как происходит инициализация waRequestFile? Или параметр конструктора, или что вы передаёте в waRequest::file().

    И если не сложно, покажите пожалуйста, какая у вас получается структура $_FILES в таком многомерном случае.

    • +1

      Я просто стандартным способом перехватываю saveSettings в плагине и получаю ошибку в случае, если указан файл. Сейчас не могу показать т.к. все проблемы уже решил и нашел обходной путь. waRequestFile вызывает сам движок когда перебирает поля ввода и загоняет их в массив $settings. Т.е. фактически можно просто создать в настройках поле

      <input type="file" name="shop_myplugin[option][image]">

      и прицепить к нему файл, чтобы сразу получить parse error при нажатии на кнопку save.

      В качестве option и image можно писать что угодно. главное двумерность массива. Там просто не предусмотренна другая размерность массива, кроме плоской. Т.е. берется option, и считается, что там должен лежать файл, а на самом деле там массив с файлом.

      • +2

        Ага, раскопал. Спасибо. Начиная со следующей версии фреймворка оно крэшиться больше не должно. Правда, waRequest::file() всё равно не поддерживает многоуровневые структуры by design. Файл просто не придёт в плагин в таком случае.

        • +1

          Раз пошла такая пьянка, может и генерацию groupbox исправите? Я уже писал несколько раз, в ответ тишина.

          Если в качестве value при генерации groupbox будут числа, то, при сохранении, получаем совершенно не те значения. Приходится костылировать. Например писать i1,i2,i3.., а потом из результата вырезать "i"

          Добавить комментарий

          Чтобы добавить комментарий, зарегистрируйтесь или войдите