2010-08-09 2 views
3

Я всегда использовал модель как нечто более или менее для хранения и выполнения запросов к базе данных. Я слышал о толстой модели, концепции тонкого контроллера.Что следует делать в моделях CodeIgniter?

Способ, которым я устанавливаю свои модели прямо сейчас, вызывает много нежелательных эффектов в контроллерах для таких вещей, как проверка форм, форматирование данных. Поддерживается ли проверка формы, загрузка файлов и форматирование данных в контроллере или модели?

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

ответ

3

Форма проверки обязательно должна быть частью модели. Обычно я представляю каждую форму как одну модель и передаю ей очищенную почту/получить параметры. Затем модель может принять любое действие, основанное на вводе, и использовать свойство (необязательно с геттером) для достижения успеха или отказа. В коде псевдо вы хотите, чтобы выглядеть примерно так:

class Controller 
{ 
    function action() 
    { 
     $input = new Input(); 
     $form = new FormModel($input); 
     if ($errors = $form->errors()) 
     { 
      //load the appropriate view for the errors 
     } 
     else 
     { 
      //load the appropriate view for success with an optional redirect 
     } 
} 
+1

Я думаю, что эта библиотека может помочь http://frankmichel.de/formgenlib/user_guide/introduction/getting_started.html – Keyo

+0

@keyo - это одна из моей колики с CI. Он требует, чтобы у вас была вся информация о форме (поля, метки, требования проверки) в контроллере. Это просто неправильно. Если вы не видите хорошую инфраструктуру PHP MVC, проверьте Kohana. – aaronasterling

+0

Хотелось бы, чтобы я мог использовать kohana или что-то с хорошей архитектурой, но я застрял с CI для работы. Я могу настроить его с некоторыми двигателями ORM. – Keyo

0

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

3

У вас есть две основные дороги. Тонкий контроллер/жирная модель или регулятор жира/тонкая модель. В основном, вы положили большую часть взаимодействия. Я предпочитаю держать в модели основную часть кода. Таким образом, код доступен практически для каждого контроллера и/или lib. Если код остается на контроллере, трудно (но не невозможно) использовать его в других контроллерах.

Верификации и другие общие задачи должны быть в lib или помощнике. Вы можете создать набор «рабочих» (это имя, которое я им даю), чтобы сделать тяжелый подъем. Кроме того, у CI есть много готовых библиотек и помощников как от команды CI, так и от сообщества. Обманите вики, чтобы найти доступную информацию.

Надеется, что это помогает Vx