Приветствую.
В этом уроке речь пойдет об одном из способов организации веб-приложения. О всем известной хотя бы на слух MVC. Оговорюсь заранее, что для того, чтобы понять содержание урока, вам будет необходимо изучить предыдущие уроки этой ветки форума и, быть может, не раз обратиться к документации http://php.net
Немного терминов
Начинать стоит, конечно же, с самого MVC. Расшифровка её такова: Model-View-Controller. Иными словами, веб-приложение, созданное на основе этой архитектуры, можно логически поделить на 3 группы:
- Model - часть скриптов, которая отвечает за реализацию работы с исходными ресурсами. Иными словами, этот функционал описывает их поведение в приложении в соответствии с бизнес-логикой. Очень часто к ним относятся различные классы, реализующие работу с данными в БД. Но это далеко не единственный вид моделей. Вообще, модель - это совокупность описывающих какой-то процесс правил и свойств, так что в эту категорию попадает широкий спектр классов реализуемого приложения.
- View - отвечает за представление данных. Неважно какими способами и из каких источников они получены, как обработаны и хранятся, в конечном итоге цель приложения - отобразить данные пользователю. И архитектура MVC разделяет логику и представление. К этой части относятся шаблоны. В них определяется конечный вид на веб-станицах - определяются html-элементы, подключаются стили и т.п. Однако сейчас все чаще шаблоны начинают отвечать и за функциональную часть приложения. Например, в них встраиваются элементы, выполняющие AJAX-запросы на сервер, являясь таким образом уже частью функциональности. Это не идет вразрез с идеологией MVC, просто расширяет понятие View
- Controller - служит "мостом" между View и Model. Это тот функционал приложения, который реализует его бизнес-процессы. Он отвечает за прием и обработку пользовательских данных, обращается к моделям (Model) приложения и использует представления (View) для вывода. Классически, контроллер делится на Action - действия. Действие - это часть контроллера, направленная на выполнение конкретного функционала. Например, "добавить пользователя", "сохранить запись" и т.п.
Далее, после того, как мы несколько познакомились с частями MVC, расскажу еще об одной популярной идее по реализации этой архитектуры. А именно - о фронт-контроллере. Фронт-контроллер (Front Controller) это некоторый управляющий контроллер. Через него идут все обращения к веб-приложению, по сути он - единая точка входа. Есть несколько способов реализации этого, однако чаще всего это делается через соответствующую настройку веб-сервера с перехватом запросов и перенаправлением их конкретному скрипту.
Пожалуй, стоит рассказать еще об одной части приложения - о маршрутизаторе. Ведь после того, как мы получили запрос, его принял фронт-контроллер, он должен что-то с ним делать. Так вот, чаще всего, он поручает эту задачу маршрутизатору. Тот разбирает пришедший запрос и на основании полученных данных обращается к соответствующему контроллеру, вызывая нужное его действие. Нередко фронт-контроллер объединяется с маршрутизатором, и так будет сделано в приведенном здесь примере, но это не очень хорошая практика. Здесь я приведу это скорее для того, чтобы читатели смогли самостоятельно разделить их, приведя таким образом архитектуру к более стройному виду.
Реализация
Теперь мы уже можем подойти собственно к самому процессу реализации. Приведу скрипт index.php, на который перенаправляются все запросы, пришедшие приложению:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- APPLICATION_PATH . '/Lib' . PATH_SEPARATOR .
- APPLICATION_PATH . '/Web' . PATH_SEPARATOR .
- APPLICATION_PATH . '/Core' . PATH_SEPARATOR .
- function __autoload($className)
- {
- $result = include_once($fname);
- return $result;
- }
- $router = new Router();
- $router->run();
- ?>