在Bootstrap中获取控制器名称

问题描述:

我想根据控制器的名称在我的引导文件中加载额外的配置文件,所以我必须在bootstrap中获取控制器的名称(在Zend Framework 1.1中)。这可能吗?在Bootstrap中获取控制器名称

我已经试过:

$front = Zend_Controller_Front::getInstance(); 
$controller = $front->getRequest()->getControllerName(); 

但是,这并不工作:

Fatal error: Call to a member function getControllerName() on a non-object in [path]\application\Bootstrap.php on line 10 

您必须首先引导前端控制器才能使用它。

$bootstrap->bootstrap('frontController'); 
$front = $bootstrap->frontController; 
$controller = $front->getRequest()->getControllerName(); 

您需要通过自举前端控制器的使用

例首先初始化请求对象in Bootstrap class:

$this->bootstrap('frontController'); 
$request = $this->getResource('frontController')->getRequest(); 
$controller = $request->getControllerName(); 

您不应该在引导文件中使用请求对象。

更好的解决方案是使用前端控制器插件及其pre-/postDispatch()方法来实现此目的。

如果你有更复杂的逻辑,或者你需要更进一步的方便,你可以扩展Zend_Controller_Action类。

+2

+1。控制器插件将是我会去的方式。 – 2012-01-10 21:01:42

+0

我加了Songos解决方案,写得更容易理解。 – 2012-01-11 18:49:20

+0

对不起,但最初的答案是我自己解析URL,所以我无法赞成,特别是当完全改变整个答案时。不能相信人们比接受的答案更有价值。 – 2013-12-10 19:26:41

你能做到这样也:

 $router = new Zend_Controller_Router_Rewrite(); 
     $request = new Zend_Controller_Request_Http(); 
     $router->route($request); 
     $request->getActionName();