2010-12-03 2 views
4

dans une fonction que je veux atteindre régulateur de courant:obtenir contrôleur de courant

$front = Zend_Controller_Front::getInstance(); 

cela donne seulement un gestionnaire, mais pas régulateur de courant.

J'ai changé le code de la fonction à l'intérieur du contrôleur. et ont demandé à leurs origines à la fois le gestionnaire j'ai obtenu de getInstance et ce

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

je reçois:

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

Comment puis-je atteindre une véritable initiative contrôleur avant?

Je ne peux pas passer en paramètre, car cette fonction est utilisée trillion fois.

+0

pour la définition J'ai défini une variable globale, dans IndexController init je l'ai définie avec $ this. – nerkn

+0

Obtenir une instance d'un contrôleur d'action n'est généralement pas une bonne idée. Si vous avez besoin d'un code qui réside dans votre contrôleur d'action disponible ailleurs dans votre application ou votre bibliothèque, ce code devrait être dans votre bibliothèque pour commencer. La deuxième réponse de takeshin l'indique également. –

+0

J'ai besoin d'une variable définie dans le contrôleur dans une fonction qui crée des liens. (Href) Dois-je lier cette fonction à une classe? – nerkn

Répondre

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

il renvoie chaîne 'index' (longueur = 5) Je veux obtenir l'instance! – nerkn

1

possible avec:

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

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

En action Helper:

$instance = $this->getActionController(); 

Mais, cela signifie sans doute que quelque chose de mal avec votre architecture.
Vous devez déplacer le code commun dont vous avez besoin pour l'aide d'action, le service ou le modèle.

+1

Bien sûr, la première approche produit une seconde instance de la classe de contrôleur, pas l'instance créée dans la boucle de répartition. Droite? Dans tous les cas, comme vous le constatez, avoir besoin d'une référence à l'instance du contrôleur elle-même indique probablement un problème d'architecture. –

Questions connexes