将所有模块流量路由到Zend Framework中的默认模块

时间:2012-10-04 20:19:31

标签: zend-framework module routing

我希望转发我的所有要求:

的.com /米/

的.com /

我想我可以尝试在模块的bootstrap中执行此操作,但前控制器尚未设置。我一直看到前端控制器插件的提及,但我该如何为这个模块设置它?

对于这些愚蠢的问题感到抱歉,我仍然试图掌握Zend框架。

1 个答案:

答案 0 :(得分: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);
    }
}

要激活它,请使用Front Controller注册插件:

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