2012-02-28 60 views
1

是否可以在Zend Framework中創建一個可以使用通配符或正則表達式匹配主機名的路由器(無論主機名中有多少部分)?Zend框架中的主機名和基於正則表達式的路由

我可以建立符合基於主機名

$externalHostname = new Zend_Controller_Router_Route_Hostname(
     'ext.mysite.com', array(
      'module'=> 'external', 
    )); 

但如果我想達到這樣的路線:

$externalHostname = new Zend_Controller_Router_Route_Hostname(
     'ext.*', array(
      'module'=> 'external', 
    )); 

哪裏是開頭的任何主機名「內線」。被路由到「外部」模塊,獨立的子域多少級則主機名的,所以

  • ext.mysite.com
  • ext.test.mysite.com

會都匹配。

這怎麼能實現?

回答

0

您無法通過Zend_Controller_Router_Route_Hostname來實現此目的。 如果您打算只匹配有限數量的子域級別(比如說2-4),它可能已經起作用了。在這種情況下,您可以爲每個案例添加多個主機名路由。

但無限 - 我不這麼認爲。

0

Zend Router是做什麼的?

回答:它基本上設置並告訴前端控制器什麼是當前模塊/控制器/動作。然後Front控制器告訴Zend Dispatcher進入moduleFolder/controllerFolder並執行actionMethod。

現在您可以檢查您的上述條件並手動設置路由器。

現在的問題是你應該檢查和設置這個路由器?

其中一個解決方案是: - 在public/index.php文件中,您可以將其註冊爲插件$ frontController-> registerPlugin(「my_router」),my_router應該擴展「Zend_Controller_Plugin_Abstract」。在這個my_router類的構造函數中,你可以設置你自己的路由器。

我想說,只需檢查Zend Framework基本流程(在發出請求時,zend框架內會發生什麼?)