2010-12-03 75 views
4

的功能我想达到电流控制器:获得电流控制器

$front = Zend_Controller_Front::getInstance(); 

此只给出一个处理程序,但不是当前的控制器。

我将代码从功能更改为控制器内部。 并询问他们的起源无论是处理器从我得到的getInstance这

var_dump(get_class($front), get_class($this)); 

我得到:

string 'Zend_Controller_Front' (length=21) 
string 'IndexController' (length=15) 

我怎样才能达到真正启动前端控制器?

我不能作为参数传递,因为这个函数被使用了万亿次。

+0

quicness我在IndexController init中定义了一个全局变量,我用$ this设置了它。 – nerkn 2010-12-03 13:06:11

+0

获取动作控制器的实例通常不是一个好主意。如果您需要驻留在应用程序或库中其他位置的可用于您的操作控制器的代码,那么该代码应该可能位于您的库中。 takehin的第二个回答也说明了这一点。 – 2010-12-03 15:27:22

+0

我需要一个变量在控制器中定义一个链接函数。(href)我应该把这个函数绑定到一个类上吗? – nerkn 2010-12-03 15:40:32

回答

7
Zend_Controller_Front::getInstance()->getRequest()->getControllerName(); 
1

可能有:

$front = Zend_Controller_Front::getInstance() 
$request = $front->getRequest(); 
$module = ucfirst($request->getModuleName()); 
$controller = ucfirst($request->getControllerName()); 

$instance = new $module . '_' . $controller . 'Controller'; 

在动作助手:

$instance = $this->getActionController(); 

,这可能意味着这件事情错了你的体系结构。
您应该将需要的通用代码移动到操作帮助程序,服务或模型中。