Статья опубликована в рамках: Научного журнала «Студенческий» № 5(133)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2
РЕАЛИЗАЦИЯ РОУТЕРА ДЛЯ САЙТА НА ЯЗЫКЕ PHP
АННОТАЦИЯ
Реализация роутера на языке программирования PHP для работы сайта. Роутер отвечает за вызов контроллера, соответствующего запрошенному url-адресу.
Ключевые слова: роутер, маршрутизация, MVC, роут.
Разработка веб-приложений является трудоемким процессом. Ее разделяют на два уровня: фронтенд и бэкенд. Фронтенд представляет собой клиентскую сторону пользовательского интерфейса. Сюда можно отнести: разработку дизайна, работу с версткой, javascript-элементы. Бекэнд же представляет собой программно-аппаратную часть сервиса. Сюда можно отнести: работу с базой данных, реализацию структуры сайта. Одним из важнейших элементов в бекэнде является - маршрутизатор или роутер.
Ни одно веб-приложение не может обойтись без работы роутера, если только это не одностраничный сайт или простенький лендинг. Роутер обрабатывает каждый запрос на сайте, введенный в адресную строку, после чего вызывает нужный контроллер, чтобы пользователь получил требуемые им данные. Если запрос пользователя - некорректен, то контроллер выведет ошибку.
В этой работе я придерживаюсь концепции MVC. MVC - схема разделения структуры приложения на три компонента: модель, представление и контроллер. Модель - предоставляет данные и реагирует на команды контроллера, изменяя своё состояние. Представление - отвечает за отображение данных модели пользователю, реагируя на изменения модели. Контроллер - интерпретирует действия пользователя, оповещая модель о необходимости изменений. Роутер выступает здесь связующим звеном между Front Controller (точка входа index.php) и контроллером, который работает с запрашиваемым пользователем элементом. Ниже представлена схема устройства MVC-проекта и место роутера в нем.
Рисунок 1. Место роутера в модели MVC
Согласно схеме выше, пользователь отправляет запрос в адресной строке (прим. https://something.com/news/100) далее он попадает на Front Controller где класс Router его анализирует, определяет какой контроллер нужен для обработки данного запроса (в данном случае это контроллер NewsController и метод actionview() после чего передает ему управление. Чтобы сопоставить контроллер и запрос пользователя существует так называемая таблица роутов. Роут - набор правил, заданный разработчиком для вызова соответствующих запросу пользователя методов контроллера.
Таким образом, чтобы разработать роутер для сайта нужно реализовать соответствующий класс с методами и таблицу роутов.
Ниже будет представлен код класса Router.php с комментариями на языке PHP.
class Router
{
private $routes;
public function __construct()
{ //указываем путь к файлу с роутами
$routesPath = ROOT . '/config/routes.php';
$this->routes = include($routesPath);
}
private function getURI()
{
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function run()
{
// Получить строку запроса
$uri = $this->getURI();
// Проверить наличие такого запроса в routes.php
foreach ($this->routes as $uriPattern => $path) {
// Сравниваем $uriPattern и $uri
if (preg_match("~$uriPattern~", $uri)) {
// Получаем внутренний путь из внешнего согласно правилу.
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
// Определить контроллер, action, параметры
$segments = explode('/', $internalRoute);
$controllerName = array_shift($segments) . 'Controller';
$controllerName = ucfirst($controllerName);
$actionName = 'action' . ucfirst(array_shift($segments));
$parameters = $segments;
// Подключить файл класса-контроллера
$controllerFile = ROOT . '/controllers/' .
$controllerName . '.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
// Создать объект, вызвать метод (т.е. action)
$controllerObject = new $controllerName;
$result = call_user_func_array(array($controllerObject, $actionName), $parameters);
if ($result != null) {
break;
}
}
}
}
}
Список литературы:
- Стив Макконнелл Совершенный код. - СПб: БХВ, 2020.
- MVC [Электронный ресурс] // Википедия. – Режим доступа: https://ru.wikipedia.org/wiki/Model-View-Controller
- Велмесов Ю. HP роутер (router) для сайта [электронный ресурс] — Режим доступа. — URL: https://velmesov.ru/development/backend/ (дата обращения 22.12.2020)
Оставить комментарий