我希望我在问题中明白我的意思!
我想在_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();
}
再次感谢!
答案 0 :(得分:1)
看起来这段代码在Bootstrap
类中。由于Bootstrap
代码在路由之前运行 - 实际上这个阶段是路由通常是定义的 - 控制器和操作尚未确定。
如果你想获得这些信息,你需要创建一个实现早期运行方法的front-controller plugin - 在路由设置了控制器和动作之后运行 - 就像{{1 }}或routeShutdown()
或dispatchLoopStartup()
。
退房:ZF Dispatch Overview(PDF)