2012-10-04 168 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