Что такое Шаблон и Вид в MVC и разница между ними?
Вид, View, Представление - это сущность, экземпляр класса View, если так будет угодно, содержащий свою логику (к примеру,  рендер). Шаблон, Template - это само отображение вида. Шаблонов у вида может быть много, например, несколько элементов меню могут быть разбиты на несколько шаблонов. Слайдер - ещё один шаблон. Но в итоге вы создадите экземпляр вида со своим базовым шаблоном (layout). А уже в этом базовом шаблоне подключите дополнительные части (partials). Если я правильно понял вопрос.
Ну у меня так получалось - Вид выгледел как класс, а шаблон как html. Формально вид получал данные из контроллера, чтобы потом выбрать шаблон-обертку со скриптами, и выдать результат, но это может и не совсем верно, если учесть что верно вообще хрен знает как.
Ну то есть "правильно" с точки зрения подхода - это в каждом контроллере подключать все файлы скриптов от вашей верстки (чтобы потом их сжать например) - но если у вас 100 контроллеров, то что - 100 раз подключать?
Получается надо другому контроллеру это сбагрить, а если он тоже контроллер, то получается его если хотеть можно вызвать через роут. А как ты вызовешь через роут внешний вид без контента - лишено смысла. Вот некоторые и отделяют этакий "контроллер" подгружающий скрипты, называя его Вид и делая его классом. Правильно или нет - не знаю, позволяет написать вариант отображения один раз и хранить его отдельно от остального кода, который работает с данными, сэкономить время.
Вон в яваскрипте response.send(text) верно из контроллера, тут мы почему-то решили что все должно темплейтом заканчиваться
Такто веб работает запрос-ответ. Шаблон MVC позволяет вам немножко:
- разделить файлы по папкам в первую очередь в своем мозгу
- избавится от бесконечных require dirname(__FILE__) . "/path/to/damn/foo/bar/file.php" заменив их более удобным $this->load->template("file")
- но потом снова ударится в то, что данные нужно передавать туда сюда и в конце все равно прийти к тому, что основной файл (контроллер?) должен выдавать ответ и выставлять код ответа...
Прикол то в чем, ответ сайта предполагает обработку ошибок и выбор контента, который ты отдашь. Так например если в HTTP_ACCEPT лежит "application/json", то ваш контроллер вообще не должен подгружать никакие виды (он будет "echo $content;" который на самом деле не $content, а вполне стандартный массив вида (status, errorcode, message, data); таким образом понятие вида которое то есть то нет не может быть стандартом его наличия.
Вот например, вам нужно вывести ошибку о том, что файла вида для ошибки нету. Что делать? Проверить наличие файла и вывести вид, которого нет? Фигня. Ответом управляет отдельный класс/файл/модуль/компонент, в который вы просто передадите шаблон, опять же при вызове определенных контроллеров, а контроллер был вызван роутером разбором исходного адреса.
Отсюда можно сказать, что сам шаблон MVC реализуется всего одним модулем - Loader, который имеет spl_autoload_register() и $obj = new $class() (для моделей Model::getInstance()); $obj->init(); return $obj; В случае ошибки класс Loader вызывает собственный метод error(), который передает управление классу Request, а поскольку существует некое такое обязательство полной несвязности классов напрямую, чтобы они могли отдельно функционировать, то простите как? Loader->error() не может вызывать Request->send() потому что это отдельные модули. Значит нужен общий модуль, именуемый ядро, который и решает, что если модуль подключен, то он выдает ответ, иначе print_r();die(); - там нормальное такое путало...
Некоторые потом начинают играть в "события". Ну как же дескать - если прямой связанности быть не может, чтобы модули были отдельные друг от друга, то надо получается, чтобы происходил обмен приказами, которые просто громко звучат на все приложение и начинают сюда систему событий прикручивать, делая из php -> js, чтобы было удобнее соответствовать "правильному стандарту", которого нет.
Это просто про то, что файлы лежат в определенных папках, и их можно подключать постоянно не просчитывая пути до них.