Правильно-ли я понял концепцию MVC?

349
31 мая 2017, 07:02

Хотел уточнить своё понимание концепции. Я понял что работать всё должно примерно так:

url разбирает роутер, определяя какой контроллер будет обрабатывать запрос

Далее подключается нужный контроллер, а если подходящего контроллера не найдено - вид отдаёт 404 ошибку.

Если контроллер успешно подключен, он извлекает необходимые данные через модели, получает некоторый массив необходимых данных и передаёт их в вид

Вид принимает данные и вставляет их в нужные места шаблона и выдает результат

Я правильно понял?

Второстепенный вопрос: нормально-ли вызывать другие контроллеры из контроллера?

И ещё один второстепенный вопрос. Можно ли назвать контроллер сценарием страницы? Ведь по сути он манипулирует данными (через модели) и приводит их в необходимый для вьювера вид, например в массив.

То есть всё работает так:

site/news

Роутер: я ищу в папке controllers news.php, если нахожу - произвожу инклуд.

Контроллер news.php: я запрашиваю у моделей (классов) необходимую информацию, например массив из последних 10 новостей, общее их количество, количество страниц с новостями и т.д.

Теперь я передаю данные в вьювер новостей "news.php"

Вьювер news.php: я отвечаю за то, что увидит в итоге пользователь. В цикле перебирающем пришедшие данные я подключаю шаблон short_article для каждой новости и передаю туда данные о заголовке, тексте, дате и авторе (для примера), а в ответ получаю сгенерированный html код который передаю в конструктор шаблона article_list, в ответ получаю опять же html который передаю в шаблон main вместе с другими данными полученными от контроллера.

Собранную строку я (функция) возвращаю обратно в контроллер, который в свою очередь выводит её пользователю. Работа скрипта завершена, пользователь видит страницу из шаблона main (основной шаблон сайта), где в $content вставлен шаблон article_list (обертка для списка материалов с навигацией по страницам), где в $content вставлена строка собранная из шаблонов short_article.

Если вдруг какого-то шаблона не обнаруживается, выбрасывается исключение и контроллер может точно доложить о том, что такого-то шаблона не существует (ну или просто ошибку 500 в продакшене).

Правильно ли я описал пример работы или нет?

И вот ещё. Кто должен выводить данные пользователю? Контроллер или вьювер?

Вот варианты:

Контроллер: Собираю данные. Передаю в вьювер

Вьювер: Собираю шорты Собираю лист Собираю мэйн Возвращаю строку

Контроллер: Вывожу строку

ИЛИ

Контроллер: Собираю данные.

Собираю шорты Собираю лист Собираю мэйн

Вывожу строку

ИЛИ

Контроллер: Собираю данные. Передаю в вьювер

Вьювер: Собираю шорты Собираю лист Собираю мэйн Вывожу строку

READ ALSO
Не работает require_once на сервере

Не работает require_once на сервере

ПриветСтранное поведение на сервере

471
Вывод содежимого таблицы из БД в таблицу Html

Вывод содежимого таблицы из БД в таблицу Html

Добрый день! Пытаюсь вывести данные из БД в таблицу htmlИмеется таблица

354
Не могу понять set_exception_handler

Не могу понять set_exception_handler

имеется кусок кода:

319
Как перебрать массив и произвести мат действия над сопадениями?

Как перебрать массив и произвести мат действия над сопадениями?

Добрый день, есть два массива, такого форматаНужно перебрать массив и если в первом и втором массиве есть совпадения ключа, например [Вася]...

304