Блог в CodeIgniter: Где начинается модель и заканчивается контроллер?

Я тестирую CodeIgniter и пытаюсь создать простой блог. Видеоурок на сайте CodeIgniter хорош, но очень неполный. Я не слишком знаком со структурой MVC, и мне интересно, как именно используется модель. Например, в настоящее время я занимаюсь административной частью своего блога, которая позволяет вам создавать, удалять и изменять записи. Представление содержит только xhtml, а об остальном позаботится контроллер. Что должно быть в модели? Происходит ли в модели все, что связано с базой данных (т. е. вставки, обновления, выборки и т. д.)?


person Manu    schedule 25.06.2009    source источник
comment
Почему кто-то проголосовал против этого? Если вы никогда раньше не работали с MVC, это очень актуальный (и распространенный) вопрос.   -  person nilamo    schedule 25.06.2009
comment
Может потому, что вопрос слишком конкретный (про codeigniter), а не про MVC вообще.   -  person MarmouCorp    schedule 30.06.2009
comment
Это я могу понять, но если вы не очень много знаете о MVC, вы можете не знать, что он не зависит от языка/фреймворка, и, таким образом, предоставит как можно больше подробностей о том, как он применим к вашей ситуации.   -  person nilamo    schedule 30.06.2009
comment
Ну, я знаю, что это не зависит от фреймворка, я просто почувствовал, что должен добавить информацию о том, что я на самом деле пытаюсь сделать. Кто знает, может быть, кто-то мог найти информацию по этому конкретному вопросу.   -  person Manu    schedule 01.07.2009
comment
Я читал кое-что о MVC, и теперь я понимаю свою ошибку: я начал помещать все в контроллер, когда модель должна быть больше. Судя по всему, контроллер какой-то тупой, используется только для привязки действия в представлении к функции в модели.   -  person Manu    schedule 28.07.2009


Ответы (4)


Зависит от того, кого вы спросите.

Некоторым людям нравится помещать в модель как можно больше (проверка, извлечение данных и т. д.), и контроллер просто нажимает на нее, чтобы получить необходимые данные, которые он затем передает представлению.

Подумайте об этом так: если у вас есть более одного контроллера, обращающегося к одной модели, то не должны ли общие вещи между ними находиться в общем месте (при условии, что эта общая вещь действительно имеет какое-то отношение к модели)?

person nilamo    schedule 25.06.2009
comment
Это хороший ответ, но я хотел бы указать здесь на хорошую статью о моделях в качестве дополнительного чтения: blog.astrumfutura.com/archives/ - person Jani Hartikainen; 27.06.2009
comment
Контроллер отвечает только за получение параметров http и преобразование их во что-то, что модель может переварить. Контроллер является связующим звеном между вашим клиентом и сервером. Такой способ позволяет повторно использовать код вашей модели, когда вы решите серверировать других клиентов, используя xml, json или любой другой транспорт. - person Juan Mendes; 18.08.2010

Модель должна содержать все, что связано с базой данных, и выполнять все основные операции CRUD (создание, получение, обновление, удаление).

Контроллер должен обрабатывать всю связь между моделью и представлением. Так, например, если у вас есть форма для добавления нового сообщения, у вас должно быть представление для этой формы, которое вызывается из контроллера. Контроллер проверит, было ли что-либо отправлено, и, если что-то было, вызовет метод создания/вставки из модели публикации.

person GSto    schedule 26.06.2009

Для меня модель — это то, где я делаю всю «грязную» работу для своих данных. Я извлекаю, вставляю, обновляю данные в базу данных, все в модели. Я создаю 1 модель для 1 таблицы в БД.

Контроллер будет логическим центром страницы, которую я создаю. Нужно как можно тоньше. Если функция выходит за пределы 1 экрана, то она слишком длинная (за исключением случаев, когда она выполняет проверку формы, которая должна выполняться в контроллере). Вот где Модель приходит играть. Контроллер просто передает данные в модель. Я проверяю, обрабатываю и форматирую данные в модели. Затем мой контроллер извлекает обработанные данные из модели, передает их для просмотра, заканчивает.

person Community    schedule 27.06.2009
comment
Кроме того, модель не всегда должна выполнять задачу, связанную с базой данных. Я также использую модель для получения пользовательских данных из файлов cookie. Для меня это данные, и модель должна их обрабатывать, прежде чем я использую их в контроллере/представлении. - person ; 27.06.2009
comment
Это и мой выбор. Моя модель выполняет функции базы данных, и это все. Библиотеки выполняют общие функции, не связанные с базой данных, а контроллеры просто собирают данные и доставляют их в представление. - person Craig Hooghiem; 12.08.2010

модель = это объект, который «разговаривает с вашей базой данных» представление = это объект, который строит контроллер пользовательского интерфейса = является командиром.. он получил команду от пользователя, а затем передает ее модели и служит пользователю через представление.

чтобы создать простой блог, попробуйте прочитать начало работы с Codeigniter. это очень поможет вам после просмотра видео. ссылки на codeigniter хорошо задокументированы и хорошо объяснены. попробуй это сначала.

person nightingale2k1    schedule 25.06.2009
comment
Модель не является реализацией шаблона активной записи. Вот куда должна идти обработка данных. Это также должно дать вам какой-то способ подключения к БД, да, но его единственная цель - не доступ к БД. - person AntonioCS; 25.06.2009
comment
общение с базой данных не всегда в активной записи. Я создаю вручную свою модель, чтобы имитировать активные записи (хотя это так просто и не гибко). Но модель в MVC должна общаться с БД, хотя в CI это не обязательно (вы можете просто использовать представление и контроллер, чтобы делать все, что хотите) - person nightingale2k1; 26.06.2009
comment
Что ж, я обнаружил, что вводные видеоролики codeigniter хороши для того, чтобы показать, на что способен фреймворк, а не для того, чтобы начать проект блога. В видео не заботятся о безопасности и прочих важных вещах, и не показывают как пользоваться моделью (поэтому я здесь и задаю вопрос ^^;) - person Manu; 26.06.2009