(Yaf >=1.0.0)
Yaf_Router 是标准的框架路由器。路由是将 URI 终结点(在基本 URI 之后的部分:参见 Yaf_Request_Abstract::setBaseUri())分解为参数,以确定哪个模块、控制器和控制器的哪个操作应该接收请求的过程。模块、控制器、操作和其他参数的值被封装到一个 Yaf_Request_Abstract 对象中,然后由 Yaf_Dispatcher 处理。路由只进行一次:当请求最初被接收并且在第一个控制器被分派之前。Yaf_Router 被设计为允许使用纯 PHP 结构实现类似 mod_rewrite 的功能。它非常松散地基于 Ruby on Rails 路由,并且不需要任何关于 Web 服务器 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,它将匹配形如 controller/action 的 URI。此外,模块名称可以作为第一个路径元素指定,允许形如 module/controller/action 的 URI。最后,它还将默认匹配附加到 URI 的任何其他参数 - controller/action/var1/value1/var2/value2。
注意:
模块名称必须在配置文件中定义,例如 application.module="Index,Foo,Bar",在这种情况下,只有 index、foo 和 bar 可以被认为是模块名称。如果没有配置,则只有一个名为 "Index" 的模块。
以下是一些关于如何匹配这些路由的示例
示例 #5 Yaf_Route_Static(默认路由)示例
// Assuming the following configure: $conf = array( "application" => array( "modules" => "Index,Blog", ), ); Controller only: http://example/news controller == news Action only(when defined yaf.action_prefer=1 in php.ini) action == news Invalid module maps to controller name: http://example/foo controller == foo Module + controller: http://example/blog/archive module == blog controller == archive Module + controller + action: http://example/blog/archive/list module == blog controller == archive action == list Module + controller + action + params: http://example/blog/archive/list/sort/alpha/date/desc module == blog controller == archive action == list sort == alpha date == desc
注册的路由堆栈
在路由阶段之后,这指示用于路由当前请求的路由的名称。您可以通过 Yaf_Router::getCurrentRoute() 获取此名称。