PHP Микрофреймворк HLEB

Скачать (90 KB)Скачать c GitHub
Предназначение Установка Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Дополнительно

Маршрутизация

Маршрутизация - это первостепенная задача фреймворка по обработке входящего запроса. Здесь определяется какой именно маршрут отвечает за данный адрес и назначаются дальнейшие действия.

Маршруты проекта составляются разработчиком в файле "/routes/main.php", в этот файл могут быть вставлены (инклюдированы) другие файлы с маршрутами из папки "routes", которые вместе и составят карту маршрутизации. Особенностью данных маршрутов стоит считать, что при их загрузке идёт проверка фреймворком на общую правильность и последовательность использованных методов, в случае исключения генерируется ошибка с указанием причины исключения. Так как в карте маршрутов проверке подвергаются все существующие там маршруты, это гарантирует их общую корректность. Если после проведенных изменений в карте маршрутизации фреймворк не сгенерировал характерных сообщений, то в дальнейшем эти сообщения не будут появляться, по крайней мере до следующих изменений в подключенных файлах маршрутов.

Маршруты определяются методами класса Route, основным из которых является get(). Все методы этого класса доступны и используются только в карте маршрутизации.

Внимание! Файлы маршрутов кэшируются и не должны содержать никакого использующего внешние данные кода. В идеале там могут находится только методы класса Route и комментарии к маршрутам.

Метод get()

Следующий маршрут выведет при обращении к корневому URL сайта строчку "Hello, world!".
Route::get('/', 'Hello, world!');
Однако, чтобы не загромождать карту роутов html-кодом , можно указать путь к файлу из папки "views", в примере файл "/views/index.php" содержит индексную страницу приложения. Он указан как целевой при помощи функции view().
Route::get('/', view('index'));

Функция view()

Имеет два параметра, первый из которых обязателен, он указывает на файл в папке "views" проекта, второй представляет собой массив с данными, который можно использовать в PHP-коде вставляемого файла. Этот массив будет доступен в файле из функции data(), которая возвращает сам массив или конкретное значение по ключу, например data(0) вернет значение по ключу 0. Но все ключи типа string этого массива дополнительно преобразуются в переменные, поэтому необходимо при их назначении учитывать правила именования переменных в PHP. Например:
Route::get('/map/', view('/maps/new', ['x' => 59.9, 'y' => 30.3]));
Здесь при открытии условного адреса "site.com/map/" будут отображены данные из "/views/maps/new.php", в который переданы переменные $x и $y с соответствующими значениями, пользоватся ими удобнее, чем функцией data().
// Файл /views/maps/new.php <?php var_dump($x); // float(59.9) var_dump($y); // float(30.3)

Именованные маршруты

Присваивание маршруту уникального названия необходимо для дальнейшего получения адреса маршрута по названию маршрута.
Route::get('/', 'Домашняя страница')->name('home');
// Файл /views/test.php <?= getByName('home'); ?> // Выводит "/"
Подробнее о получении адреса маршрута в разделе «Получение данных».

Динамические адреса

Микрофреймворк HLEB обрабатывает произвольные адреса по заданной разработчиком сайта схеме, например:
Route::get('/ru/{version}/{page}/', 'Использован динамический адрес.');
В указанном случае все адреса URL, отвечающие условной схеме "site.com/ru/.../.../" будут отдавать одинаковую текстовую строчку, а значения "version" и "page" становятся доступны из объекта Request: Request::get("version") и Request::get("page"). Приведенный пример не позволяет его использовать, но, после ознакомления с контроллерами, станет понятным полезность этого объекта.

Из этого следует, что при обращении к адресу "/ru/v1/routes/", Request::get("version") будет отдавать строку "v1", а Request::get("page") - "routes";

К динамическим адресам допустимо добавлять условия по регулярному выражению при помощи метода where().

Метод where()

Используется после метода get(), добавляя проверку по регулярному выражению к нужным элементам динамического адреса.
Route::get('/ru/{version}/{page}/', 'Дополнительная проверка динамического адреса.')->where(['version' => '[a-z0-9]+', 'page' => '[a-z]+']);
Таким образом, область допустимых адресов сужается после проверки значения "version" на содержание только латинских букв и цифр, а "page" проверяется на наличие только латинских букв. Стоит обратить внимание, что метод where() принимает единственный аргумент в виде массива.

Составление карты маршрутов

Методы класса Route сделаны максимально комбинируемыми, так что составлять их можно в любом порядке, главное, чтобы их последовательность не нарушала условия применения самих методов, например, метод where() должен идти после существующего метода get(), к которому и будет применён. В итоге последовательность такого вида:
Route::prefix('/ru/{version}/')->getGroup()->get('/', 'Только версия.')->get('/{page}/', 'Версия со страницей.')->where(['page' => '[a-z]+'])->endGroup()->where(['version' => '[a-z0-9]+']);
Полностью соответствует:
Route::prefix('/ru/{version}/'); Route::getGroup(); Route::get('/', 'Только версия.'); Route::get('/{page}/', 'Версия со страницей.')->where(['page' => '[a-z]+']); Route::endGroup(); Route::where(['version' => '[a-z0-9]+']);
Как видно второй вариант более читабелен, но выбор компоновки маршрутов остается за разработчиком сайта. Также нужно знать, что при наличии двух совпадающих адресов в карте маршрутов, использован будет первый подходящий под URL, остальные игнорируются.

В этом примере можно заметить также применение группировки и добавления префикса.
Про группы маршрутов есть отдельный раздел инструкции. Метод prefix() применяется к группам, вычленяя общее начало у сгруппированых адресов. Здесь при соединении prefix("/ru/{version}/") и get("/", ...) получается искомый адрес "/ru/{version}/", а при соединении prefix("/ru/{version}/") и get("/{page}/", ...) получается "/ru/{version}/{page}/".
Далее у метода get(), имеющего в адресе "{page}" уточняется допустимое содержание при помощи метода where(), а у группы адресов проверяется таким же образом параметр "{version}".



Предназначение Установка Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Дополнительно


HLEB - PHP Микрофреймворк Свободная лицензия. Без гарантий. © fomiash 2019