# Класс Yaf_Router

(Yaf >=1.0.0)

## Введение

Yaf_Router - это стандартный каркасный маршрутизатор. Маршрутизация - это процесс получения конечной точки URI (той части URI, которая идёт после базового URI: смотрите Yaf_Request_Abstract::setBaseUri()) и разложение её на параметры, чтобы определить, какой модуль, контроллер и действие должны получить запрос. Эти значения модуля, контроллера, действия и других параметров упакованы в объект Yaf_Request_Abstract, который затем обрабатывается Yaf_Dispatcher. Маршрутизация происходит только один раз: при первоначальном получении запроса и до отправки первого контроллера. Yaf_Router предназначен для обеспечения функциональности, подобной mod_rewrite, с использованием чистых структур PHP. Он основан на маршрутизации Ruby on Rails и не требует каких-либо предварительных знаний о перезаписи URL веб-сервера. Он предназначен для работы с одним правилом Apache mod_rewrite (одним из):

Пример #1 Правило перезаписи для Apache

    RewriteEngine on
    RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php

или (предпочтительнее):

Пример #2 Правило перезаписи для Apache

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]

При использовании Lighttpd используйте следующее правило перезаписи:

Пример #3 Правило перезаписи для Lighttpd

    url.rewrite-once = (
      ".*\?(.*)$" => "/index.php?$1",
      ".*\.(js|ico|gif|jpg|png|css|html)$" => "$0",
      "" => "/index.php"
    )

При использовании Nginx используйте следующее правило перезаписи:

Пример #4 Правило перезаписи для Nginx

    server {
      listen ****;
      server_name  yourdomain.com;
      root   document_root;
      index  index.php index.html;

      if (!-e $request_filename) {
        rewrite ^/(.*)  /index.php/$1 last;
      }
    }

## Маршрут по умолчанию

Yaf_Router поставляется с предварительно настроенным маршрутом по умолчанию Yaf_Route_Static, который будет соответствовать URI в форме контроллера/действия. Кроме того, имя модуля может быть указано в качестве первого элемента пути, что позволяет использовать URI формы модуля/контроллера/действия. Наконец, он также будет соответствовать любым дополнительным параметрам, добавляемым к URI по умолчанию - controller /action/var1/value1/var2/value2.

> Замечание:

> Имя модуля должно быть определено в конфигурации с учётом application.module="Index,Foo,Bar", в этом случае только index, foo и bar могут рассматриваться как имя модуля. Если не настроено, есть только один модуль с именем "Index".

Некоторые примеры соответствия таких маршрутов:

Пример #5 Пример использования Yaf_Route_Static(маршрут по умолчанию)

    // Предполагая следующую настройку:
    $conf = array(
       "application" => array(
          "modules" => "Index,Blog",
       ),
    );

    Только контроллер:
    http://example/news
        controller == news
    Только действие (если определено yaf.action_prefer=1 в php.ini)
        action  == news

    Неверный модуль отображается на имя контроллера:
    http://example/foo
        controller == foo

    Модуль + контроллер:
    http://example/blog/archive
        module     == blog
        controller == archive

    Модуль + контроллер + действие:
    http://example/blog/archive/list
        module     == blog
        controller == archive
        action     == list

    Модуль + контроллер + действие + параметры:
    http://example/blog/archive/list/sort/alpha/date/desc
        module     == blog
        controller == archive
        action     == list
        sort       == alpha
        date       == desc

## Обзор класса

class Yaf_Router {
/* Свойства */
protected $_routes;
protected $_current;
/* Методы */
public function __construct()
public function addConfig(Yaf_Config_Abstract `$config`): bool
public function addRoute(string `$name`, Yaf_Route_Abstract `$route`): bool
public function getCurrentRoute(): string
public function getRoute(string `$name`): Yaf_Route_Interface
public function getRoutes(): mixed
public function route(Yaf_Request_Abstract `$request`): bool
}

## Свойства

_routes

  стек зарегистрированных маршрутов

_current

  после фазы маршрутизации указывается название того, какой маршрут используется для маршрутизации текущего запроса. Вы можете получить его имя с помощью Yaf_Router::getCurrentRoute().

## Содержание

- Yaf_Router::addConfig — Добавляет настроенные маршруты в маршрутизатор
- Yaf_Router::addRoute — Добавляет новый маршрут в маршрутизатор
- Yaf_Router::__construct — Конструктор класса Yaf_Router
- Yaf_Router::getCurrentRoute — Получает имя действующего маршрута
- Yaf_Router::getRoute — Получает маршрут по имени
- Yaf_Router::getRoutes — Получает зарегистрированные маршруты
- Yaf_Router::route — Назначение route

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open