====== Класс lmbRoutes ======
Идея класса lmbRoutes заключается в том, чтобы получать массив именованных параметров из строки посредством применения определенных паттернов (route) к данной строке и наоборот - из массива параметрв формировать строку. В качестве строки обычно используется URL, таким образом lmbRoutes обычно используется в [[RequestDispatching|разборе Запроса]] для получения параметров.
===== 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);
Список паттернов (конфиг) - это обычный массив, каждый элемент которого - один **паттерн**. Паттерн состоит из секций:
* **path**, который указывает сам паттерн,
* **defaults**, где указываются значения по-умолчанию параметров, которые можно получить из паттерна,
* **requirements**, которые указывают на регулярные значения, которые должны выполняться для некоторых параметров, чтобы паттерн мог считаться подходящим для строки, пришедшей в метод dispatch($url).
То есть при использовании указанного конфига вызов:
$result = $routes->dispatch('/blog/2004/12');
будет означать получение след. параметов в $result:
array('service' => 'Blog',
'action' => 'archive',
'year' => 2004,
'month' => 12,
'day' => XX ); // текущий день, так как будет использовано default значение параметра.
===== lmbRoutes доступен через lmbToolkit =====
По-умолчанию объект класса lmbRoutes доступен через lmbToolkit при помощи метода getRoutes(), который добавляется в lmbToolkit через [[limb3_2007_2:ru:packages:web_app:lmbWebAppTools|lmbWebAppTools]]:
$routes = lmbToolkit :: instance()->getRoutes();
$params = $routes->dispatch('/news/archive');
Объект класса lmbRoutes, получаемый через lmbToolkit, конфигурируются при помощи содержимого файла routes.conf.php, который обычно хранится в папке /settings. Вот пример содержимого такого файла:
'/:service/:action',
'defaults' => array('service' => 'News',
'action' => 'display')),
array('path' => '/:service/:action/:id',
'defaults' => array('action' => 'display')));
?>
===== lmbRoutes для составления URL-ов =====
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);
Этот алиас используется в теге [[limb3_2007_2:ru:usage:wact:tags:lmbrequesttags:lmbrouteurltag|]], при помощи которого можно составлять url-ы из параметров прямо в шаблоне.