Маршрутизация в PHP Micro-Framework HLEB
Отличительной особенностью микропрограммы HLEB является минимализм кода и скорость работы.
Маршруты проекта собираются разработчиком в файле /routes/main.php
, другие файлы с маршрутами из папки routes
могут быть вставлены (включены) в этот файл (require
), которые вместе составляют карту маршрутизации.
Кеширование идет в папке: /storage/cache/routes/
Маршруты определяются методами класса Route
, основным из которых является get()
. Все методы этого класса доступны и используются только в карте маршрутизации.
Route::get('/', 'Hello, world!');
Отобразите содержимое файла /views/index.php
с помощью view()
функции (также доступно в контроллерах).
Route::get('/', view('index'));
Это пример маршрута с более сложным названием. Здесь $x
и $y
значения передаются в файл /views/map/new.php
, и устанавливаются условия для динамического адреса (version
и page
могут принимать разные значения). Вы можете вызвать маршрут по его имени, используя специальные функции фреймворка.
Route::get('/ru/{version}/{page?}/', view('/map/new',
['x' => 59.9, 'y' => 30.3]))->where(['version' => '[a-z0-9]+',
'page' => '[a-z]+'])->name('RouteName'); // /ru/.../.../ or /ru/.../
Группы маршрутов
Способы, расположенные перед маршрутом или группой:
type()->, prefix()->, protect()->, before()->
Route::prefix('/lang/')->before('AuthClassBefore')->getGroup();
Route::get('/page/', "<h1>Page</h1>"); // /lang/page/
Route::protect()->type('post')->get('/ajax/', '{"connect":1}'); // /lang/ajax/
Route::endGroup();
Способы, расположенные после маршрута или группы:
->where(), ->after()
Route::type(['get','post'])->before('ClassBefore')->get
('/path/')->controller('ClassController')->after('ClassAfter');
Полезные материалы: Маршрутизация (в HLEB)
Вроде маршрутизация очевидна, но она предлагает множество вариантов, группировок и т.д. Что можно использовать, чтобы сократить количество маршрутов:
Огромное поле для деятельности.
При группировки маршрутов, мы можем определить не особо корректные название методов, что потянет за собой рефакторинг.
P.S. Собственно, тут я вижу аналогию в навигацией и удобством при использование категорий и тегов. Одинаковый почти подход.
Вот сайт: nasua.ru, где я в навигации полагался на категории, фасетная схема используется только для определения внутри категорий.
Есть и сайты и с темами (тегами), где их создают участники. Там есть аналогичная проблема: пути, маршруты, «где я нахожусь», навигация, не очевидна.
И хочется сделать не только вертикальные, но и горизонтальные связи. Чтобы находясь на странице мы могли сразу сказать, где мы и куда стоит «нажать», чтобы попасть туда, куда мы хотим.
Подход с категориями и тегами имеет плюсы и минусы. Везде есть сильные и слабые стороны.
Вот и сейчас (поймал себя на мысли) что глядя на маршруты, вижу сложность. Они тут не особо систематизированы. Вроде всё понятно, но не совсем. И необходимо вернуться к началу.
Как и в Nasua с категориями, они есть, но не особо очевидны. С тегами аналогичная ситуацию.
Мы сейчас будем добавлять темы еще (и пару материалов по ним) и посмотрим, насколько навигация становится сложной.
И маршруты необходимо править, а навигацию необходимо исследовать.
Вот сайт: CodeProject, где опубликован Framework HLEB. Это крупный и серьезный сайт. Но попробуйте нажать на что-то в левом меню, например, php. Вы попадете на участок (страницу), где потеряетесь. Легкости и понимание (UX) нет.
А пока добавляем темы (чтобы можно было исследовать удоство)…
Сегодня тогда тем 10 и с 20 вопросами накидаю тогда.