MVC путаница, передавая данные из вида в модель через контроллер - PullRequest
0 голосов
/ 01 декабря 2010

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

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

В представлениях CodeIgniter получают свои данные от контроллера, который демультиплексирует / проверяет параметры и извлекает соответствующие данные из моделей.Важно, что:

  1. Представления выводятся. Представления не связаны напрямую с моделями, так как они определяют HTML / XML / JSON / CSS (любые страницы,логические части страниц или другие фрагменты выходных данных, такие как API и ресурсы).Это означает, что вы не вызываете модели из представлений в CI.

  2. Контроллеры являются прокси. Контроллеры и модели не производят вывод.Контроллеры принимают запросы GET и POST и выполняют вызовы, необходимые представлению для печати результата, часто проверяя параметры и мультиплексируя множественные вызовы модели для получения всех соответствующих данных.

  3. Модели получают и помещают данные. Модели должны возвращать свои данные в независимом формате: либо как объекты данных модели, либо как более общие (но согласованные) хеши данных.Чем чище возвращаются данные модели, тем меньше связи вы найдете между вашими видами и моделями (и тем больше вы сможете повторно использовать детали модели).

В CodeIgniter есть несколькоместа, где вы можете обнаружить совпадение:

  • JavaScript часто оказывается связанным с представлениями (и может выполнять такие вещи, как проверка, обычно задача контроллера).Вы можете улучшить это, переместив Javascript из представлений (хорошо работает для больших кусков, менее хорошо для маленьких).
  • В PHP возврат хешей (массивов ключ / значение) проще, чем возврат объектов (меньше кода), но сниженный тип безопасности).Это часто является источником связывания.
  • Общие выходные данные часто попадают в контроллеры (вы можете избежать этого, переместив их в вспомогательные библиотеки CI).

Цель состоит в том, чтобываши взгляды не знают о ваших моделях, за исключением того, что они получают от них данные, соответствующие определенной спецификации.Контроллеры просто получают и помещают (они не генерируют вывод HTML и не обращаются к данным напрямую), а модели в основном представляют собой SQL или другие формы получения данных и их вставки во что-то структурированное.

0 голосов
/ 02 декабря 2010

Да, вы отправляете данные формы в функции контроллера. Затем эта функция обрабатывает данные и вызывает представление.

Если вы попробуете это любым другим способом, вы попадете в адский код.

Одна функция может обрабатывать исходное отображение формы и отправку этой формы.

Просто проверьте, была ли отправлена ​​форма, если это так, обработайте ее данные, иначе отобразите форму.

function login(){

  if($this->input->post('submitted')==1){

    //process the form data

  }else{

    //show the form

  }

}
0 голосов
/ 01 декабря 2010

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

Комментарий от здесь ...

Модель управляет поведением и данные домена приложения, отвечает на запросы о предоставлении информации о его состоянии (обычно из вид), и отвечает на инструкции изменить состояние (обычно из контроллер). * * 1 010

Фразы "обычно" являются ключевыми. Шаблоны предназначены для управляемости и обслуживания до некоторой степени. Иногда шаблоны являются препятствием для достижения цели в управляемой и управляемой манере, а иногда используются чрезмерно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...