Итак, займемся переводом для начала
на главной создаю объект:
В точке входа/во фронт контроллере. Объект этот завется маршрутизатор или раутер. Имеет отношение к MVC - нет.
вот что в файле hello.class.php:
Такое именование файлов и классов было модным во времена php4. Отройте для себя
PSR0 (и еще отдельно про PSR-4 можете почитать).
Т.е. при обращении по url: site.localhost/hello я вижу hello!!!! на экране.
Поздравляю вас с первым контроллером... хоть и убогим слегка. Читаем про контроллеры
в контексте GRASPну в htaccess я прописал нужную конструкцию
Верни мне мой 2007-ой, когда все было круто и все хвастались своими ЧПУ на модреврайтах. Подумайте в сторону единой точки входа и перенаправления всех запросов, для которых не нашлось файлов на эту точку входа. Но это так... просто... совет. Это упростит жизнь при миграции скажем на nginx или черокки какой.
Вот я и поплыл в этих терминах.
Заходим на википедию и выплываем.
Model-view-controller - схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные.
Советую почитать полную статью и пройтись по ссылкам. Особенно по части модели данных. Это должно прояснить для вас такой момент что модель это модель данных. То есть у вас есть данные, например блог-пост, есть его модель (просто класс Post который имеет поля id, title, body и т.д.). Проще говоря модель это представления данных в приложении. А view - это слой который занимается тем что переводит данные из формата модели в формат запрашиваемый пользователем. Причем вам не запрещается работать из контроллера с базой. Ну то есть как, есть такие вещи как сервисный слой и тонкие контроллеры, но мы же пока только учимся да?). В любом случае модель не должна знать ничего о том где и как она хранится.
Теперь по поводу view. Давайте вспомним что такое запрос в контексте WEB-приложений. Это старый добрый HTTP запрос. У запроса есть заголовок - Accept который говорит что хочет получить пользователь (пользователи могут быть не живыми и хотеть что-то другое, например JSON). Через него браузер говорит что хочет получить. Например он говорит "хочу text/html" и мы должны выполнить следующие стэпы:
- вызвать контроллер
- контроллер достает из закрамов модельки которые хочет пользователь и отдает их во view.
- view переводит данные из формата приложения в формат который хочет увидеть пользователь.
В очень грубой форме view может быть таким:
PostView {
private $post;
public function __construct(Post $post) {
$this->post = $post;
}
public function renderTitle() {
return sprintf("<h1>%s</h1>", $this->post->getTitle());
}
// и еще пара методов
public function render() {
$this->renderTitle();
$this->renderBody();
}
}
И по одному таком классу на каждую модель и в каждом классе придется реализовывать сложную логику по формированию вьюшек для наших моделей. Согласитесь, это не удобно. Потому придумали фигачить все в шаблонах и разруливать это движками для шаблонизации (да, одна единственная функция render которая просто инклудит php файл это тоже движек шаблонов).
Практическое задание:
Если все что делает контроллер это отдает отрендренный шаблон без какой либо переменной в нем.... Это MVC? Где тут модель?