2010-12-03 160 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(); 

,這可能意味着這件事情錯了你的體系結構。
您應該將需要的通用代碼移動到操作幫助程序,服務或模型中。