Router
Описание
Реализация маршрутизации, для организации ЧПУ.
Настройки
На данный момент нет. Исходя из идеологии юзабилити кода, надо бы сформировать требования к настройкам и использовании роутов.
Есть возможность получении информации о всех роутах в одном месте (на данный момент это модуль /routers/), что позволяет отслеживать конфликты (в ручном режиме), и быстро сооринтироваться по кастомному УРЛ в какой модуль нужно идти.
Плюс, в sekeleton'е в режиме отладки отправляется заголовок Bluz-Debug который в явном виде передаёт информацию о модуле и контроллере.
Использование
Без дополнительных махинаций всё работает по уже привычной для многих схеме /module/controller/key1/value1/key2/value2.
Теперь можно прокачать каждый контроллер по отдельности:
/** * I. static route * @route /login/ * * II. regexp route with integer params mapping * @route /users/{$id} * @param integer $id * * III. regexp route with string params mapping * @route /{$alias}.html * @param string $alias */
При построение маршрутов никаких дополнительных махинаций не требуется (!!!):
$this->url('users', 'login'); $this->url('users', 'profile', array('id' => $id)); $this->url('pages', 'show', array('name' => $name));
Особенности
- Если указать несколько маршрутов в описании контроллера, то все они будут вести к контроллеру, но только последний будет использовать для построения ссылок.
- Статические маршруты без использования переменных имеют приоритет, таким образом можно организовать работу двух следующих маршрутов без конфликтов:
/** * @route /my-static-page.html */ /** * @route /{$alias}.html */
- Если вы используете переменные в маршруте то в обязательном порядке необходимо их ловить как параметр функции.
Недостатки
- Не все возможные варианты покрывает текущая реализация, думаю процентов 90%, и workaround'ов пока не придумано
- В обязательном порядке необходимо кешировать карту роутов (и кешируется пакетом Cache), иначе сильно просядет производительность, следовательно надо за ним следить (надо бы добавить принудительное обновление кеша роутов)