views:

145

answers:

1

ZF 1.9.6 Trying to change the module based on the user agent of the request. When I try to get the request object from the Front, I get NULL.

Currently I'm trying to set the module name from the Bootstrap _initModule method I created.

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

However, when executed, it's still going to the 'default' module.

+3  A: 

I don't think Bootstrap is the right place, because it happens before any request routing starts.

I'd suggest using preDispatch front controller plugin for that:

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

With:

resources.frontController.plugins.moduleselector = "Your_Application_Plugin_ModuleSelector"

in you application.ini

Ivan Krechetov
I agree that this is a much better solution than I was trying. Thanks for the help!
I'm impressed! Thanks! Where should the class definition go?
KOGI
Anywhere your autoload can find it
Ivan Krechetov