我有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());
}
感谢
答案 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);