Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
bonjour,
J'ai une application en Zend et MVC.
J'ai créé un controleur et des actions.
Je me trouve obliger de répéter le même code d'une action dans une autre action de même controlleur.
Mais ça augmente la page du controleur.
Comment je fais ça?
Merci
Hors ligne
Une des solutions possibles est d'écrire ton code dans un fichier php codecommun.php
et tu fais appel à ce code avec
require_once('codecommun.php');
qui va inclure les lignes de ton fichier et les exécuter.
Bon travail
Hors ligne
Il fait beau à Tunis ?
class IndexController extends Zend_Controller_Action { public function indexAction() { $this->actionCommune() ; } public function autreAction() { $this->actionCommune() ; } private function actionCommune() { echo "Hello World !"; } }
C'est ça la POO (entre autre)
Hors ligne
grrr
il y a pour ça l'héritage.
faire une classe
class Application_Controllers_Action extends Zend_Controller_Action
à placer dans le dossier conollers
mettre dans cette classe tous les membres et méthodes commune
faire dériver ses controllers de cette classe
class IndexController extends Application_Controllers_Action
utiliser les méthodes communes
$this->comonMethod();
cela est très pratique pour l'initialisation des cont^roleurs
placer dans la classe Action une méthode init et faites dedans les initialisations de vos contrôleurs tous en hériteront automatiquement.
A+JYT
Hors ligne
Comme il n'y a qu'un seul controlleur je trouve cela un peu lourd comme méthode, mais c'est aussi une façon de faire.
bonne journée à tous !
Dernière modification par ubini (15-04-2008 11:53:03)
Hors ligne
Je donnais une solution général pour des éléments commun à plusieurs contrôleurs car même si ce n'est pas le cas ici c'est un cas très fréquent
si c'est dans la même action il suffit de faire une méthode
éviter de l'appeler xxAction et de préférence en faire une méthode protected.
class IndexController extends Zend_Controller_Action { public function indexAction() { $this->_methodeCommune() ; } public function autreAction() { $this->_methodeCommune() ; } protected function _methodeCommune() { echo "Hello World !"; } }
il est parfois utile de dériver un contrôler par exemple lorsqu'on a un module réutilisable pour le spécialiser il suffit de le dériver ainsi on ne fait qu'ajouter des caractéristiques sans avoir à tout refaire.
donc pour pouvoir utiliser et surtout surcharger la _methodeCommune il vaut mieux la mettre protected.
d'une façon générale on mets private ce qui ne peut absolument pas fonctionner si un surcharge venait à changer la chose.
Hors ligne
Bonjour,
Un an plus tard je me demande ce que tu voulais dire (Sekaijin) quand tu parlais de "dériver un contrôler par exemple lorsqu'on a un module réutilisable pour le spécialiser".
On fait dériver un controleur d'un autre controleur d'un autre module ? Je suis complètement à côté de la plaque peut-être...
Car la notion de module réutilisable, je vois assez mal comment on la met en oeuvre. En effet, je ne vois pas bien comment utiliser un module depuis les controleurs d'un autre module (forward ?).
Si quelqu'un peut éclairer l'ignorant que je suis... merci.
Harry
Hors ligne