Идея класса lmbRoutes заключается в том, чтобы получать массив именованных параметров из строки посредством применения определенных паттернов (route) к данной строке и наоборот - из массива параметрв формировать строку. В качестве строки обычно используется URL, таким образом lmbRoutes обычно используется в разборе Запроса для получения параметров.
Список паттернов lmbRoutes получает в конструктор:
$config = array(array('path' => 'blog/', 'defaults' => array('service' => 'Blog', 'action' => 'display')), array('path' => 'blog/:year/:month/:day', 'defaults' => array('service' => 'Blog', 'action' => 'archive', 'year' => date('Y'), 'month' => $default_month = date('m'), 'day' => $default_day = date('d')), 'requirements' => array('year' => '/(19|20)\d\d/', 'month' => '/[01]?\d/', 'day' => '/[0-3]?\d/')), array('path' => 'blog/:action', 'defaults' => array('service' => 'Blog', 'action' => 'display'))); $routes = new lmbRoutes($config);
Список паттернов (конфиг) - это обычный массив, каждый элемент которого - один паттерн. Паттерн состоит из секций:
То есть при использовании указанного конфига вызов:
$result = $routes->dispatch('/blog/2004/12');
будет означать получение след. параметов в $result:
array('service' => 'Blog', 'action' => 'archive', 'year' => 2004, 'month' => 12, 'day' => XX ); // текущий день, так как будет использовано default значение параметра.
По-умолчанию объект класса lmbRoutes доступен через lmbToolkit при помощи метода getRoutes(), который добавляется в lmbToolkit через lmbWebAppTools:
$routes = lmbToolkit :: instance()->getRoutes(); $params = $routes->dispatch('/news/archive');
Объект класса lmbRoutes, получаемый через lmbToolkit, конфигурируются при помощи содержимого файла routes.conf.php, который обычно хранится в папке /settings. Вот пример содержимого такого файла:
<?php $conf = array(array('path' => '/:service/:action', 'defaults' => array('service' => 'News', 'action' => 'display')), array('path' => '/:service/:action/:id', 'defaults' => array('action' => 'display'))); ?>
lmbRoutes :: dispatch($url) используется для получения массива параметров по строке. Но существует и обратная операция: lmbRoutes :: toUrl($params, $route = '').
Второй параметр метода toUrl - это название паттерна. То есть паттерны могуть быть именованными, например:
$config = array('default' => array('path' => '/:service/display', 'defaults' => array('action' => 'display')), 'full' => array('path' => '/:service/:action', 'defaults' => array('action' => 'display'))); $routes = new lmbRoutes($config);
Если имя паттерна не указано, lmbRoutes пытается угадать, какой паттерн больше всего подходит. Если ни один паттерн нельзя применить, тогда генерится исключительная ситуация (exception).
Детали работы класса lmbRoutes см. в тестах lmbRoutesDispatchTest.class.php и lmbRoutesToUrlTest.class.php
Для вызова метода toUrl объекта класса lmbRoutes, который доступен через lmbToolkit, существует алиас:
$url = lmbToolkit :: instance()->getRoutesUrl($params);
Этот алиас используется в теге <routes_url>, при помощи которого можно составлять url-ы из параметров прямо в шаблоне.