Skip to content
AntonShevchuk edited this page Oct 13, 2014 · 14 revisions

Описание

Реализация маршрутизации, для организации ЧПУ.

Настройки

На данный момент нет. Исходя из идеологии юзабилити кода, надо бы сформировать требования к настройкам и использовании роутов.

Есть возможность получении информации о всех роутах в одном месте (на данный момент это модуль /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));

Особенности

  1. Если указать несколько маршрутов в описании контроллера, то все они будут вести к контроллеру, но только последний будет использовать для построения ссылок.
  2. Статические маршруты без использования переменных имеют приоритет, таким образом можно организовать работу двух следующих маршрутов без конфликтов:
/**
 * @route /my-static-page.html
 */

/**
 * @route /{$alias}.html
 */
  1. Если вы используете переменные в маршруте то в обязательном порядке необходимо их ловить как параметр функции.

Недостатки

  1. Не все возможные варианты покрывает текущая реализация, думаю процентов 90%, и workaround'ов пока не придумано
  2. В обязательном порядке необходимо кешировать карту роутов (и кешируется пакетом Cache), иначе сильно просядет производительность, следовательно надо за ним следить (надо бы добавить принудительное обновление кеша роутов)
Clone this wiki locally