====== Класс 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-ы из параметров прямо в шаблоне.