L'appel de la fonction membre de l'autre contrôleur dans le zend framework?
Est-il possible d'appeler la fonction membre d'un autre contrôleur dans le zend framework, si oui, alors comment?
<?php
class FirstController extends Zend_Controller_Action {
public function indexAction() {
//general action
}
public function memberFunction() {
//a resuable function
}
}
Voici un autre contrôleur de
<?php
class SecondController extends Zend_Controller_Action {
public indexAction() {
//here i need to call memberFunction() of FirstController
}
}
Veuillez expliquer comment je peux accéder à memberFunction() à partir de la deuxième contrôleur.
Solution
Meilleure idée est de définir un AppController et de faire tout ce que d'habitude contrôleurs de prolonger AppController qui étend encore Zend_Controller_Action.
class AppController extends Zend_Controller_Action {
public function memberFunction() {
//a resuable function
}
}
class FirstController extends AppController {
public function indexAction() {
//call function from any child class
$this->memberFunction();
}
}
Maintenant memberFunction
peut être appelé à partir des contrôleurs de l'extension de AppController
comme une règle de l'héritage simple.
- Juste un avis, je préfère largement à la configuration partagée classes ou modules quand j'ai besoin d'une fonctionnalité commune. Cependant, j'ai couru dans une situation à l'aide de zend framework 2, où il serait très utile d'utiliser un parent AppController qui s'est étendu sur un couple d'autres contrôleurs. Votre solution a fonctionné à merveille. Dans ZF2 vous de l'installation:"class AppController s'étend AbstractActionController" et le contrôleur enfant serait la même: "class FirstController extends AppController" je sais qu'il y a de meilleures façons de le faire et je devrais probablement repenser certains app structure, mais il fonctionne.
Vous devez vous connecter pour publier un commentaire.
Les contrôleurs ne sont pas conçu pour être utilisé de cette façon. Si vous voulez exécuter une action de l'autre contrôleur après votre contrôleur, utilisez le
_forward()
méthode:Notez que cela ne fonctionne que pour méthodes d'action (“memberAction”), non arbitraire des fonctions de membre du!
Si
SecondController::memberFunction()
fait quelque chose qui est nécessaire sur plusieurs contrôleurs, placer ce code dans une aide d'action ou de la bibliothèque de la classe, de sorte que les deux contrôleurs peuvent accéder à la fonctionnalité sans avoir à dépendre les uns des autres._forward
comme obsolète. Merci!Vous devriez envisager d'affacturage le code en soit une aide d'action ou de votre modèle de sorte qu'il peut être appelé à partir de deux contrôleurs qui en ont besoin.
Ce qui concerne,
Rob...
Je vous suggère de suivre à SEC et déplacer les fonctions de la bibliothèque commune lieu. Par exemple créer dans le dossier de la bibliothèque de
et fichier
puis appelez votre classe
et de définir vos méthodes
Maintenant, vous pouvez appeler à partir de n'importe quel endroit dans le code à l'aide de votre nouvel espace de noms auquel vous devez vous inscrire.
dans n'importe quel contrôleur, vous pouvez appeler vos propres méthodes à l'aide de: