在_init YEars()Zend Framework中访问Controller和Action名称

时间:2010-12-21 11:36:47

标签: zend-framework

我希望我在问题中明白我的意思!

我想在_initVars()中访问getControllerName()和getActionName()。这就是我想要做的事情:

    protected function _initVars() 
    {

        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $view = $layout->getView();
        $view->theme = 'MY_THEME';


        $this->bootstrap('frontController');
        $front = $this->getResource('frontController');


        echo '<pre>';
        print_r($front->getRequest());
        echo '</pre>';
        exit;

        return $view;

    }

我没有得到任何回应,字段controllername和actionname都返回空,这是我在回复中得到的:

Zend_Controller_Front Object
(
    [_baseUrl:protected] => 
    [_controllerDir:protected] => 
    [_dispatcher:protected] => Zend_Controller_Dispatcher_Standard Object
        (
            [_curDirectory:protected] => 
            [_curModule:protected] => default
            [_controllerDirectory:protected] => Array
                (
                    [default] => /var/www/proj_rodrigo/application/controllers
                )

            [_defaultAction:protected] => index
            [_defaultController:protected] => index
            [_defaultModule:protected] => default
            [_frontController:protected] => 
            [_invokeParams:protected] => Array
                (
                )

它只是代码的一部分,必要的东西在那里,在Zend的旧模式中我能够做到调用Zend_Front_Controller,但现在我不知道如何使用它。

感谢任何帮助! 最诚挚的问候和对不起我的BAD英语。

要解决此问题,我在我的插件中添加了postDispatche:

public function postDispatch(Zend_Controller_Request_Abstract $ request) {

$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
$layout = $bootstrap->getResource('layout');
$view = $layout->getView();

$view->controller = $this->getRequest()->getControllerName();
$view->action = $this->getRequest()->getActionName();

}

再次感谢!

1 个答案:

答案 0 :(得分:1)

看起来这段代码在Bootstrap类中。由于Bootstrap代码在路由之前运行 - 实际上这个阶段是路由通常是定义的 - 控制器和操作尚未确定。

如果你想获得这些信息,你需要创建一个实现早期运行方法的front-controller plugin - 在路由设置了控制器和动作之后运行 - 就像{{1 }}或routeShutdown()dispatchLoopStartup()

退房:ZF Dispatch Overview(PDF)