alleroy
@alleroy
Изучаю фреймворк laravel

Что такое Шаблон и Вид в MVC и разница между ними?

Что такое Шаблон и Вид в MVC? И в чём разница между ними?
  • Вопрос задан
  • 310 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Kraky
Вид, View, Представление - это сущность, экземпляр класса View, если так будет угодно, содержащий свою логику (к примеру, рендер). Шаблон, Template - это само отображение вида. Шаблонов у вида может быть много, например, несколько элементов меню могут быть разбиты на несколько шаблонов. Слайдер - ещё один шаблон. Но в итоге вы создадите экземпляр вида со своим базовым шаблоном (layout). А уже в этом базовом шаблоне подключите дополнительные части (partials). Если я правильно понял вопрос.
Ответ написан
Комментировать
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Ну у меня так получалось - Вид выгледел как класс, а шаблон как 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, чтобы было удобнее соответствовать "правильному стандарту", которого нет.

Это просто про то, что файлы лежат в определенных папках, и их можно подключать постоянно не просчитывая пути до них.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
03 мая 2024, в 14:52
100000 руб./за проект
03 мая 2024, в 14:40
1000 руб./за проект