Логика в Модели или в Контроллере с CodeIgniter?

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

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

  1. Пользователь перешел к "somewebpage/register", который загружает функцию "регистра" контроллера
  2. Проверки контроллера, чтобы видеть, отправлена ли форма - если это не было, покажите им, форма, иначе, вызывает функцию "регистра" "пользовательской" модели
  3. Проверки модели Users, чтобы видеть, взято ли имя пользователя уже. Если это, это возвращает errorcode (определенный как константа PHP) для той ошибки.
  4. Если имя пользователя не было уже взято, модель регистрирует пользователя и возвращает TRUE.
  5. Контроллер собирает то, что функция "регистра" модели возвращает и показывает ошибочной странице, странице успеха или странице отказа базы данных на основе errorcode.

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

Действительно ли это - способ, которым я должен разрабатывать с CodeIgniter, или с MVC в целом?

Заранее спасибо за любую справку.

5
задан Jonathan Chan 7 July 2010 в 01:23
поделиться

1 ответ

Как вы обнаружите, 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 Автор покажет вам, как использовать плагин doctrine с CI, который помещает уровень абстракции между вашими моделями и базой данных. Это очень интересно, блестяще объяснено и использует систему регистрации / входа в качестве начальных примеров.

6
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: