(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]
Пример #3 Правило перезаписи для Lighttpd
url.rewrite-once = ( ".*\?(.*)$" => "/index.php?$1", ".*\.(js|ico|gif|jpg|png|css|html)$" => "$0", "" => "/index.php" )
Пример #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
стек зарегистрированных маршрутов
после фазы маршрутизации указывается название того, какой маршрут используется для маршрутизации текущего запроса. Вы можете получить его имя с помощью Yaf_Router::getCurrentRoute().