Инструменты пользователя

Инструменты сайта


limb3_2007_2:ru:packages:web_app:lmb_routes

Класс lmbRoutes

Идея класса lmbRoutes заключается в том, чтобы получать массив именованных параметров из строки посредством применения определенных паттернов (route) к данной строке и наоборот - из массива параметрв формировать строку. В качестве строки обычно используется URL, таким образом lmbRoutes обычно используется в разборе Запроса для получения параметров.

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 через 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 для составления 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);

Этот алиас используется в теге <routes_url>, при помощи которого можно составлять url-ы из параметров прямо в шаблоне.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   ___    _  __   ____   _  __   __ __
  / _ \  | |/_/  / __/  / |/ /  / //_/
 / // / _>  <   / _/   /    /  / ,<   
/____/ /_/|_|  /___/  /_/|_/  /_/|_|
 
limb3_2007_2/ru/packages/web_app/lmb_routes.txt · Последнее изменение: 2010/11/10 10:02 — 127.0.0.1