Страница 1 из 1

модель или контроллер

Добавлено: 2012.02.29, 16:22
stasuss
привет всемогущий, all!

зачитался литературой по MVC и задался вопросом. Куда же засунуть код для формирования excel таблиц в приложении на yii. в модель или контроллер. на счет контроллера везде пишут что он должен быть максимально простым и маленьким. а про модель в yii пишут что она бывает двух типов - либо для работы с формой, либо для работы с бд. вот и вопрос. либо я туплю дико, либо чего?) куда совать весь громоздкий код своего приложения?

всем спасибо за внимание)

Re: модель или контроллер

Добавлено: 2012.02.29, 16:39
kosenka
stasuss писал(а):Куда же засунуть код для формирования excel таблиц в приложении на yii. в модель или контроллер.
в модель

Re: модель или контроллер

Добавлено: 2012.02.29, 16:47
andy_s
Формирование таблицы может быть либо методом модели, либо отдельным поведением, но никак не может находиться в контроллере. Контроллер должен лишь вызвать метод генерации таблицы и отправить её пользователю.

Re: модель или контроллер

Добавлено: 2012.02.29, 17:32
esche
в хелпер =)

Re: модель или контроллер

Добавлено: 2012.02.29, 18:12
samdark

Re: модель или контроллер

Добавлено: 2012.03.01, 07:39
stasuss
andy_s писал(а):Формирование таблицы может быть либо методом модели, либо отдельным поведением, но никак не может находиться в контроллере. Контроллер должен лишь вызвать метод генерации таблицы и отправить её пользователю.
вот вопрос еще.. использую phpexcel. вывожу таблицу с помощью

Код: Выделить всё

$objWriter->save('php://output'); 
objWriter это класс phpecel.

в таком случае не понимаю как собственно контроллер будет передавать таблицу, сгенерированую с модели, пользоватулю.. опять создавать инстансы классов?

и еще напишите средний размер ваших контроллеров и моделей. интересно просто)

Re: модель или контроллер

Добавлено: 2012.03.01, 11:37
andy_s
Я с phpexcel не работал, но процесс я вижу примерно таким:

1) Запускается какое-то действие контроллера (actionExcelTable).
2) В контроллере вызывается метод модели createExcelTable() с некоторыми аргументами.
3) Метод отрабатывает и возвращает либо ссылку на файл, либо строку, либо ещё что-то, что можно отправить пользователю на скачивание.
4) Отправляем файл с помощью http://www.yiiframework.com/doc/api/1.1 ... ile-detail

По среднему размеру ничего сказать не могу, да и неправильный это вопрос какой-то :) Зато могу сказать, что там должно быть:

1) Проверка прав.
2) Проверка, пришли ли какие-то POST/GET данные.
3) Вызов некоторых методов моделей (их может быть и много, поэтому и размер увеличится). Очень желательно избегать использования объектов/методов, напрямую относящихся к созданию запросов к БД (напр., CDbCriteria).
4) Подключение отображения.

А вообще идеальный контроллер - это набор универсальных CAction-классов :D

Re: модель или контроллер

Добавлено: 2012.03.01, 12:24
andreyrud
В Yii нет абстрактной модели данных. Т.е. модель привязана к конкретной таблице в ДБ или к форме. Если нужно построить сложный вывод данных из нескольких таблиц с расчетами промежуточных данных, то поручать это моделям трудно. Нужно либо городить сложные связи между данными и громоздить сложные запросы, либо формировать нужный массив с данными в контроллере. Таким образом не получается сделать контроллер простым. Или такой подход неправилен?

Re: модель или контроллер

Добавлено: 2012.03.01, 12:47
andy_s
Сделайте компонент, который будет собирать данные из нескольких моделей (каких - определяет контроллер). Так можно будет легко его тестировать и переносить между проектами. Код внутри контроллера никакими из этих качеств не обладает и не должен (про тестирование можно поспорить, но я не особый эксперт в этом деле пока :) ).