Заливка файла на сервер в моделе или в контроллере?

Рейтинг: 1Ответов: 1Опубликовано: 22.11.2014

Здравствуйте! Изучаю MVC архитектуру, мучает вопрос. Через форму передаются некоторые поля и массив файлов. Где обработать эти данные и сохранить на сервер? Я придумал несколько варинатов:

  1. В контроллере сразу же сохранить файлы и передать идентификаторы в модель.
  2. В Phalcon\Model есть метод beforeCreate и в нём бы очень хорошо было поставить сохранение файлов, это было бы даже универсальнее, чем в контроллере.
  3. Создать Events Manager в index.php, зарегистрировать как сервис в Dependency injection. В сервисе проверять: если событие beforeCreate и в запросе есть файлы, то залить их, и забить в соответствующий столбик идентификаторы файлов.

Но все методы мне не нравятся и кажутся дурными. В первом - потому что при добавлении в другом контроллере опять придётся писать заливку файлов. Даже если сделать это функцией - всёравно не правильно. Далее, в моделе - хороший вариант, но вроде бы в моделе можно только с базой работать по стандартам да и если появится ещё модель, тоже с принятием файла - придётся туда тоже писать код тот же. И последний метод - хорош, но как бы мне в него передавать: таблицу в которую записываются файлы, папку. Чтобы из разных моделей были разные настройки.
Подскажите, пожалуйста, как сделать максимально универсальным реализацию данной вещи и самое главное, чтобы было по стандартам MVC.

Ответы

▲ 2Принят

Зачем строго? Если не работаем с БД - сразу выкидываем случай с модулями.

Просто создаем папку библиотек, и туда создаем наш Upload.php, и одним методом в контроллере загружаем его. там не много строчек будет.

Обновление

Возможно я вас не правильно понял по поводу 3его варианта, но ЯВНО пихать в index.php лишнюю проверку для файлов не надо (зачем во всем сайте такая проверка) для этого есть контроллеры, а там у вас и получится в моем понимании DI, тем более если еще и с БД будете работать. DI - класс оболочка для каких либо действий, связывание которого проходит через конструкторы или методы.