如何在zend框架中为每个模块设置路由器

时间:2014-01-22 08:28:26

标签: zend-framework router

我有1个zend(v1)应用程序和2个模块:default + admin

我希望在configs/router/default.ini中设置呼叫默认模块时设置路由器 如果在模块管理员中没有任何东西

我尝试使用插件但不起作用

在我的插件中

class Australian_Controller_Plugin_DefaultRouter extends Zend_Controller_Plugin_Abstract {

    public function routeShutdown(Zend_Controller_Request_Abstract $request) {
        $currModule = $request->getModuleName();
        if ($currModule != 'default') {
            return;
        }
        $fontController = Zend_Controller_Front::getInstance();
        $router1 = new Zend_Controller_Router_Rewrite();
        $fontController->getRouter()->removeDefaultRoutes();
        $myRoutes = new Zend_Config_Ini(APPLICATION_PATH . '/configs/router/default.ini', 'production');
        $router1->addConfig($myRoutes, 'routes');
        $fontController->setRouter($router1);   

    }

}

/default/Bootstrap.php

protected function _initRoutes() {

    $fontController = Zend_Controller_Front::getInstance();
    $fontController->registerPlugin(new Australian_Controller_Plugin_DefaultRouter());

}

感谢

1 个答案:

答案 0 :(得分:0)

请注意,您在路由后添加新路由器,因此Zend已使用旧路由解码地址。这样您就可以使用新路由生成URL,但Zend无法识别它们。您需要再次调用$router->route($request);以使用新的路由集来设置模块/控制器/操作。 遗憾的是,当它在routeShutdown中调用并且必须添加到preDispatch()时,这不起作用。可悲的是,我对Zend也很陌生,仍然没有理解为什么会如此。

我使用的代码:

$fontController = Zend_Controller_Front::getInstance();
$router = $fontController->getRouter();
$r = new Zend_Controller_Router_Route(
                '/testnew',
                array(
                    'module' => 'user',
                    'controller' => 'index',
                    'action' => 'myaccount',
        )); 
$router->addRoute('testnew', $r);
$router->route($request);