Маршрутизация в PHP Micro-Framework HLEB

Evg Evg 22 Июля 2021

Отличительной особенностью микропрограммы 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)

2 Ответа

  1. Evg Evg 22 Июля 2021 (ред.)

    Вроде маршрутизация очевидна, но она предлагает множество вариантов, группировок и т.д. Что можно использовать, чтобы сократить количество маршрутов:

     Route::get('/{controller}/add')->controller('<controller>\Add<controller>Controller@add');

    Огромное поле для деятельности.

    При группировки маршрутов, мы можем определить не особо корректные название методов, что потянет за собой рефакторинг.


    P.S. Собственно, тут я вижу аналогию в навигацией и удобством при использование категорий и тегов. Одинаковый почти подход.

    Вот сайт: nasua.ru, где я в навигации полагался на категории, фасетная схема используется только для определения внутри категорий.

    Есть и сайты и с темами (тегами), где их создают участники. Там есть аналогичная проблема: пути, маршруты, «где я нахожусь», навигация, не очевидна.

    Когда есть до 10 пунктов чего-то, то ориентироваться можно легко, но что будет если их будет больше?

    И хочется сделать не только вертикальные, но и горизонтальные связи. Чтобы находясь на странице мы могли сразу сказать, где мы и куда стоит «нажать», чтобы попасть туда, куда мы хотим.

    Подход с категориями и тегами имеет плюсы и минусы. Везде есть сильные и слабые стороны.

    Вот и сейчас (поймал себя на мысли) что глядя на маршруты, вижу сложность. Они тут не особо систематизированы. Вроде всё понятно, но не совсем. И необходимо вернуться к началу.

    Как и в Nasua с категориями, они есть, но не особо очевидны. С тегами аналогичная ситуацию.

    На этом сайте используются темы и пространства для навигации. Отлично.

    Мы сейчас будем добавлять темы еще (и пару материалов по ним) и посмотрим, насколько навигация становится сложной.

    И маршруты необходимо править, а навигацию необходимо исследовать.

    Вот сайт: CodeProject, где опубликован Framework HLEB. Это крупный и серьезный сайт. Но попробуйте нажать на что-то в левом меню, например, php. Вы попадете на участок (страницу), где потеряетесь. Легкости и понимание (UX) нет.

    вот так, связал маршруты и навигацию (UX) :)

    А пока добавляем темы (чтобы можно было исследовать удоство)…

    1. Сегодня тогда тем 10 и с 20 вопросами накидаю тогда.