2011-10-07 135 views
0

我想更改我的應用程序的默認路由,以通過Bootstrap.php使用可選參數,而不是在application.ini中。我在設置所有「逃生」路線時遇到困難,我甚至不知道是否需要設置幾條路線,或者我只能使用一條路線!在默認的Zend路由中添加一個可選參數

路線必須是這樣的

":module/:area/:controller/:action" 

其中:面積是可選的,默認爲「公共」

所以到http://www.example.com/my_module/my_controller/my_action任何訪問,我可以通過FC插件以下獲得:

$request->getParam('area') = "public" 

而在http://www.example.com/my_module/my_area/my_controller/my_action我得到:

$request->getParam('area') = "my_area" 

主要的麻煩是創造所有路線,因此逃到默認模塊,指數控制器的情況下,指數這些行動沒有傳遞太多和裝載http://www.example.com/回報一樣http://www.example.com/default/public/index/index

我想使用URL Helper來生成內部URL,並且它尊重這個新的默認路由上正確的程序集。

編輯:我認爲默認路由帶有模塊的故障安全保護,如果它不存在,它默認爲控制器,但是如何模仿URL和模塊本身的其他部分的類似行爲在Bootstrap中創建它時。

任何人都可以給我一些光明或建議我在哪裏可以找到一個工作的例子?

回答

1

解決方案確實是擴展Zend_Controller_Router_Route_Abstract並創建一個新的Route處理程序來檢查url,驗證是否存在模塊,區域,控制器和操作以構建完整的功能url或派發到錯誤控制器。

繁重的工作是match()assemble()方法之間做,我作爲參考了Zend類Zend_Controller_Router_Route_Module THT的模塊,但而不是驗證是否與我創建允許領域的白名單調度中存在模塊做類似的任務,如果不匹配,則認爲該路徑部分是控制器,下一個動作和其他部分是參數。

它像魔術一樣工作!

1

您可以擴展Zend_Controller_Router_Rewrite並更改默認路由器設置和URL組裝,然後在您的Zend_Controller_Front上使用->setRouter()來使用您的新路由器實例,而不是默認路由器實例。搜索class Zend_Controller_Router_Rewrite並在此之前瞭解它。

+0

Yeap,這是我想要避免的。我雖然有一種方法可以簡單地添加路由:( –

+0

)添加路由可能有助於訪問正確的控制器/操作,但是您仍然需要對路由器進行更改以允許在不同的設置中生成URL。總是使用'setGlobalParam'來避免路由器的改變,但是鏈接並不總是看起來像你所建議的那樣 –

+0

我選擇使用Zend_Controller_Router_Route_Module的修改版本而不是重寫!然後我在Bootstrap上使用它!讓你知道結果,現在就開始吧! –