Помогите с пониманием того, что идет в Контроллере против Представления в MVC - PullRequest
1 голос
/ 25 декабря 2010

Я новичок в MVC и знакомлюсь с фреймворком Codeigniter. В качестве учебного приложения я создаю простое приложение для блога, которое дает возможность создавать, просматривать, редактировать и удалять сообщения.

Для страницы «Редактировать пост» я использую тот же файл представления, что и мой «Создать новый пост», и просто заполняю поля формы данными, полученными из моей модели, когда пользователь редактирует старый пост. .

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

Куда идет эта логика? Это идет в представлении? Или это идет в контроллере? и почему? Я начал помещать всю эту логику в файл представления, потому что я прочитал, что я должен держать код контроллера минимальным, однако теперь у меня есть большой блок кода php в верхней части моего файла представления, который имеет дело с переменными, и я не уверен если это правильный подход.

Любой совет будет высоко ценится!

1 Ответ

3 голосов
/ 25 декабря 2010

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

Проверьте функцию set_value () в Помощник по формам .Вы можете сделать что-то вроде этого в своем представлении:

<input type="text" name="subject" value="<?php echo set_value('subject', $subject); ?>" size="50" />

Если это новое сообщение, передайте пустую строку как $ subject при загрузке представления из контроллера.

Если он редактирует, передайте тему редактируемого сообщения как $ subject.

Кроме того, если пользователь отправляет форму и возникают ошибки, и вам необходимо перезагрузить форму, set_value () вернет то, что пользователь только что опубликовал (т. Е. $ _POST ['subject']).

Есть и другие вещи, такие как страница просмотра должна знать, какой заголовок отображать вверху страницы: «Создать новое сообщение» или «Редактировать сообщение».

Простопередайте переменную с именем $ page_title из вашего контроллера в представление и установите соответствующее значение.Это довольно часто, особенно когда вы начинаете создавать многократно используемые шаблоны.

Куда ведет эта логика?Это идет в представлении?Или это идет в контроллере?и почему?

В View не должно быть почти никакой логики.Может быть, простые операторы if / else, если необходимо, и циклы для перебора массивов данных.

Даже в Controller не должно быть много логики.Он в основном отвечает за роль посредника между моделями, представлениями и библиотеками.

Я читал, что должен держать код контроллера минимальным

Это связано с Контроллерами против Моделей, а не с Представлениями.Хорошей практикой является сохранение контроллеров меньшего размера и использование как можно большей логики в моделях и библиотеках.Также называется «Тощие контроллеры, жирные модели».

...