Поздравляем с Новым Годом!
   
Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 5(133)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2

Библиографическое описание:
Абдуллин Т.Р. РЕАЛИЗАЦИЯ РОУТЕРА ДЛЯ САЙТА НА ЯЗЫКЕ PHP // Студенческий: электрон. научн. журн. 2021. № 5(133). URL: https://sibac.info/journal/student/133/203165 (дата обращения: 29.12.2024).

РЕАЛИЗАЦИЯ РОУТЕРА ДЛЯ САЙТА НА ЯЗЫКЕ 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;

                }

            }

        }

    }

}

 

Список литературы:

  1. Стив Макконнелл Совершенный код. - СПб: БХВ, 2020.
  2. MVC [Электронный ресурс] // Википедия. – Режим доступа: https://ru.wikipedia.org/wiki/Model-View-Controller
  3. Велмесов Ю. HP роутер (router) для сайта [электронный ресурс] — Режим доступа. — URL: https://velmesov.ru/development/backend/ (дата обращения 22.12.2020)

Оставить комментарий