(Yaf >=1.0.0)
Yaf_Router 是標準的框架路由器。路由是指取得 URI 端點(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() 取得此名稱。