2012-10-04 106 views
0

我期待轉發我所有的請求的來源:路由所有模塊的流量默認模塊Zend框架

的.com/M/

的.com/

我以爲我可以嘗試在模塊的引導程序中執行此操作,但前端控制器尚未安裝。我不斷看到前端控制器插件的提及,但是我如何爲這個模塊設置它?

對於愚蠢的問題,我仍然試圖掌握Zend Framework。

回答

1

這裏是一個控制器插件,用於將所有流量傳送到特定模塊到默認模塊。我給出了兩種路由流量的方式,通過轉發請求(url保持不變,但執行默認模塊),或者通過將瀏覽器重定向到默認模塊。

請注意,這是未經測試,但應該工作。如果您有任何疑問或問題,請告訴我。

<?php 

class Application_Plugin_ModuleRedirector extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     $module  = $request->getModuleName(); 
     $controller = $request->getControllerName(); 
     $action  = $request->getActionName(); 

     // don't execute plugin if not in the module "m" 
     if ($module != 'm') { 
      return ; 
     } 

     // foward to default module with same controller and action 
     $request->setModuleName('default') 
       ->setControllerName($controller) 
       ->setActionName($action); 

     // OR remove the above and use this for a hard redirect 
     $urlHelper = new Zend_View_Helper_Url(); 
     $url  = $urlHelper->url(array(
             'module' => 'default', 
             'controller' => $controller, 
             'action'  => $action)); 

     $redirector = Zend_Controller_Action_HelperBroker:: 
         getStaticHelper('redirector'); 

     $redirector->gotoUrl($url); 
    } 
} 

要激活它,與前端控制器註冊插件:

Zend_Controller_Front::getInstance()->registerPlugin(new Application_Plugin_ModuleRedirector()); 
+0

我很高興地看到你的答案,並簡單URL,這像宣傳的那樣......但後來我跑進我所有的幻想路由和出於某種原因,這段代碼無法識別URL中的值是變量的模塊... :( – stagl

+0

)其中一個URL不起作用的示例是什麼?preDispatch插件在URL已經被分解用於路由,所以有可能這些更復雜的URL根據您定義的路由沒有被正確路由? – drew010