2010-12-03 11 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) 

私は本当のフロントコントローラを開始した到達できますか?

この関数は1兆回使用されるため、パラメータとして渡すことはできません。

アクションヘルパーで
$front = Zend_Controller_Front::getInstance() 
$request = $front->getRequest(); 
$module = ucfirst($request->getModuleName()); 
$controller = ucfirst($request->getControllerName()); 

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

:と

+0

私はグローバル変数を定義しましたが、IndexController initで$ thisで設定しました。 – nerkn

+0

アクションコントローラのインスタンスを取得することは、一般的には良い考えではありません。アクションコントローラにあるコードがアプリケーションやライブラリのどこかで利用できるようにする必要がある場合、そのコードはライブラリの中にあるはずです。 takehinによる2番目の答えには、これも記載されています。 –

+0

リンクを作成する関数でコントローラに定義された変数が必要です。(href)この関数をクラスにバインドする必要がありますか? – nerkn

答えて

7
Zend_Controller_Front::getInstance()->getRequest()->getControllerName(); 
+4

文字列 'index'(長さ= 5)を返す インスタンスを取得したい! – nerkn

1

可能

$instance = $this->getActionController(); 

しかし、これはおそらく、それはあなたのアーキテクチャと間違って何かを意味します。
アクションヘルパー、サービス、またはモデルに必要な共通コードを移動する必要があります。

+1

もちろん、最初のアプローチでは、ディスパッチループ内で作成されたインスタンスではなく、コントローラクラスの2番目のインスタンスが生成されます。右?いずれにしても、コントローラーインスタンス自体への参照を必要とすることは、アーキテクチャーの問題があることを示している可能性があります。 –

関連する問題