2009-11-25 156 views
5

我花了很多時間試圖讓這個工作。而我越來越絕望。 如果有人可以幫助我:)Zend Framework:如何禁用默認路由?

目前使用Zend Framework 1.9.5,儘管我一直在努力讓這個版本適用於很多版本。

我想要做的是通過XML配置提供我自己的路線,並確保在我的配置中定義的所有而不是都會以errorController結束。 (優選的方式,所以我可以EM除了EXCEPTION_NO_CONTROLLEREXCEPTION_NO_ACTION

我計算,這意味着我必須擺脫默認/的:模塊/:控制器/:動作和/:控制器/:動作路線。

所以,當我告訴路由器removeDefaultRoutes(),它不會再匹配這些默認路由。但現在的路由器,現在路由到defaultcontroller :: DEFAULTACTION每未佈線路徑(什麼?)

$front->getRouter()->removeDefaultRoutes(); 

所以任何人都知道如何使FrontController設計(或它的一部分)拋出一個異常當一個URI不能被路由?

原因我想這樣做是爲了防止重複的內容,並有較好的404頁(在這種情況下,沒有控制器/不採取行動的錯誤實際上是應用程序錯誤,而不是未找到)

回答

5

你嘗試加入像

$route = new Zend_Controller_Router_Route('*', array('controller'=>'error', 'module'=>'default', 'action'=>'error')); 


$router->addRoute('default', $route); 

您需要首先添加此路由,因爲它需要是最後處理。

+0

好的,這是我所做的。這很有效,因爲在那個動作中,我拋出一個異常,表示404。 這仍然是一個解決方法,但是感謝幫助隊友 – Maurice 2009-12-29 11:45:58

2

及時一年後快進... (時間旅行音樂)

這裏的另一種方式,我認爲是要少得多「侵擾」。你可以編寫一個插件來捕獲默認路由,當發生這種情況時,只需在整個週期結束時拋出一個異常,並由前端控制器將其轉換爲404。

class Application_Plugin_DisableDefaultRoutes extends Zend_Controller_Plugin_Abstract 
{ 
    public function routeShutdown(Zend_Controller_Request_Abstract $request) 
    { 
     $front = Zend_Controller_Front::getInstance(); 
     $currentRoute = $front->getRouter()->getCurrentRouteName(); 
     if ($currentRoute == 'default') { 
      throw new Exception('Default route is disabled'); 
     } 
    } 
} 

可以在bootstrap.php中

protected function _initPlugins() 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    $front->registerPlugin(new Application_Plugin_DisableDefaultRoutes()); 
} 

加載插件用這種方式,你可以加載插件生產機器和離開它在發展,你可能想使用默認路由快速測試或其他東西。

+0

謝謝你,我正在學習ZF,你的例子很有幫助。 – 2012-02-27 12:43:09

+0

謝謝,我發現ZF1的插件系統非常方便和強大。還沒有到處嘗試ZF2。 – Julian 2012-02-28 00:31:17