2009-12-11 59 views
3

ZF 1.9.6 尝试根据请求的用户代理更改模块。 当我尝试从Front获取请求对象时,我得到NULL。在Zend Framework中更改模块名称

目前我试图从我创建的Bootstrap _initModule方法中设置模块名称。

$front = Zend_Controller_Front::getInstance(); 
$request = $front->getRequest(); // This is NULL 
$request = new Zend_Controller_Request_Http(); 
$request->setModuleName('iphone'); 
$front->setRequest($request); 

但是,在执行时,它仍然会进入'默认'模块。

回答

7

我不认为Bootstrap是正确的地方,因为它发生在任何请求路由开始之前。

我建议使用该preDispatch前端控制器插件:

class Your_Application_Plugin_ModuleSelector extends Zend_Controller_Plugin_Abstract { 
    public function preDispatch(Zend_Controller_Request_Abstract $request) { 
     ... 
     $request->setModuleName('iphone'); 
    } 
... 
} 

有了:

resources.frontController.plugins.moduleselector = "Your_Application_Plugin_ModuleSelector" 

在你application.ini

+0

我同意这是一个更好的解决方案比我试。谢谢您的帮助! – mctom987

+0

我印象深刻!谢谢!班级定义应该去哪里? – KOGI

+0

您的自动加载可以找到它的位置 –