This sounds like a good use for a controller plugin. Instead of adding a
new route, you can simply modify the request:

Hmm, unfortunately my conditional is dependent on some of the other initialization logic in the bootstrap. So, in order to use this technique, I'd have to pass those dependencies to the plugin constructor for temporary storage there, which seems rather roundabout as well. Perhaps a combination of the two methods would work better. I could write a generically useful "goto" plugin that simply takes a controller/action to always override the current request with:

class App_Controller_Plugin_Override
    extends Zend_Controller_Plugin_Abstract
{

    protected $_action = null;
    protected $_controller = null;

    public function __construct($controller, $action)
    {
        $this->_controller = $controller;
        $this->_action = $action;
    }

    public function dispatchLoopStartup($request)
    {
        $request->setControllerName($this->_controller);
        $request->setActionName($this->_action);
    }

}

And then keep my conditional in the bootstrap, and only register the plugin when it fires:

if (<conditional>) {
    $front->registerPlugin(
        new App_Controller_Plugin_Override('my_con', 'my_act')
    );
}

Reply via email to