2010-07-07 2 views
4

Я относительно не знаком с CodeIgniter и философией MVC в целом, поэтому я пытаюсь прояснить это, прежде чем делать какие-либо вредные привычки.Логика в модели или в контроллере с CodeIgniter?

У меня есть приложение, которое регистрируется. Пользователи. В настоящее время, поток, как это:

  1. Пользователь переходит к «somewebpage/регистр», который загружает функцию «зарегистрировать» контроллера
  2. контроллер проверяет, чтобы увидеть, если форма будет отправлена ​​- если это было нет, покажите им форму, в противном случае вызовите функцию «register» модели «users».
  3. Модель пользователей проверяет, уже ли выполнено имя пользователя. Если это так, он возвращает код ошибки (определенный как константа PHP) для этой ошибки.
  4. Если имя пользователя еще не было принято, модель регистрирует пользователя и возвращает значение ИСТИНА.
  5. Контроллер собирает то, что возвращает функция «регистрации» модели, и показывает страницу с ошибкой, страницу успеха или страницу сбоя базы данных на основе кода ошибки.

Как вы можете видеть, я попытался перемещать как можно больше логики в модель. Единственной логикой, с которой я не мог переместиться, была проверка валидации формы, поскольку, похоже, CodeIgniter заставляет вас поместить ее в контроллер. (Если никто не знает об этом)

Как я должен развиваться с CodeIgniter или с MVC вообще?

Заранее благодарим за любую помощь.

ответ

6

Как вы обнаружите, CI является гибким и позволяет организовать вещи несколькими способами. Я чувствую, что модели должны быть зарезервированы только для функций, которые напрямую общаются с вашим db. Я не использую их для общей логики. Однако я понимаю, почему вы также не хотите заполнять логику логикой. Мое решение состоит в том, чтобы создать свои собственные библиотеки, чтобы содержать логику, которую вы вызываете из контроллера. Здесь вы найдете информацию о том, как создать свою собственную библиотеку здесь: http://codeigniter.com/user_guide/general/creating_libraries.html

Для аутентификации пользователей я создаю библиотеку с именем auth_library.php, в которой содержатся функции, используемые контроллерами входа, регистрации и т. Д. Аналогичным образом вы можете создать auth_model, который содержит функции, которые соединяются с db.

Вы также можете быть заинтересованы в этой серии учебных пособий: http://www.phpandstuff.com/articles/codeigniter-doctrine-from-scratch-day-1-install-and-setup Автор берет вас через использование доктрины плагин с CI, который ставит уровень абстракции между вашими моделями и дб. Это очень интересно, блестяще объяснено и использует систему регистрации/входа для первоначальных примеров.

+1

Модель в MVC должна иметь логику, поскольку она является моделью домена, но нет ничего, что помешало бы ей разбить ее на разные уровни. – airmanx86

+0

Благодарим вас за помощь, musoNic80 и airmanx86! Вы, ребята, разъяснили этот запутанный вопрос. Я был обеспокоен - никто не отвечал. ;) Спасибо! –

+0

@ airmanx86, musoNic80 Я нашел ваше обсуждение полезным, но у меня есть вопрос. Это хороший способ применить логику в модели на основе данных, переданных от контроллера к модели. Например, если переменная пуста, я хочу запустить этот запрос else этим запросом. Это хороший подход? –

Смежные вопросы