2010-12-03 7 views
4

in einer Funktion möchte ich Stromregler erreichen:erhalten Stromregler

$front = Zend_Controller_Front::getInstance(); 

dies nur einen Handler gibt aber keine aktuellen Controller.

Ich habe den Code von der Funktion in das Innere der Steuerung geändert. und fragte ihren Ursprung sowohl der Handler ich von getInstance und diese

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

ich:

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

Wie kann ich echte initiiert Front-Controller zu erreichen?

Ich kann nicht als Parameter übergeben, weil diese Funktion trillion mal verwendet wird.

+0

für Quicness Ich habe eine globale Variable definiert, in IndexController init setze ich es mit $ this. – nerkn

+0

Eine Instanz eines Action Controllers zu bekommen ist im Allgemeinen keine gute Idee. Wenn Sie Code benötigen, der sich in Ihrem Action Controller befindet, der an anderer Stelle in Ihrer Anwendung oder Bibliothek verfügbar ist, sollte dieser Code wahrscheinlich in Ihrer Bibliothek enthalten sein. Die zweite Antwort von takeshin sagt dies auch aus. –

+0

Ich brauche eine Variable im Controller in einer Funktion, die Links macht. (Href) Sollte ich diese Funktion an eine Klasse binden? – nerkn

Antwort

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

es gibt String 'Index' (Länge = 5) Ich möchte Instanz erhalten! – nerkn

1

möglich mit:

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

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

In Aktion Helfer:

$instance = $this->getActionController(); 

Aber, bedeutet dies wahrscheinlich, dass etwas nicht stimmt mit Ihrer Architektur.
Sie sollten den gemeinsamen Code, den Sie benötigen, in den Aktionshelfer, Service oder das Modell verschieben.

+1

Natürlich erzeugt der erste Ansatz eine zweite Instanz der Controller-Klasse, nicht die in der Dispatch-Schleife erstellte Instanz. Recht? In jedem Fall ist, wie Sie bemerken, die Notwendigkeit eines Verweises auf die Controller-Instanz selbst wahrscheinlich ein Hinweis auf ein Architekturproblem. –