Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
bonjour je voudrais savoir si l'on peut avec un script recupérer la liste des controller et action au sein d'un controller ?
cordialement
Hors ligne
Un script c'est beaucoup dire...
//$class = 'ton controleur' // Liste toutes les methodes $methods = get_class_methods($class); // On ne converve que les actions $methods = array_filter($methods,create_function('&$method','return substr($method,-6) === "Action";'));
Dernière modification par TiTerm (08-02-2008 15:54:17)
Hors ligne
ok sa marche et maintenant comment je peux connaitre tous les controller existant ?
Dernière modification par lebilien (08-02-2008 16:05:47)
Hors ligne
Ah j'ai mal lu, je pensais que tu voulais uniquement la liste des actions d'un controlleur.
Bah, pour avoir la liste des controleurs, il suffit de faire une recherche récursive sur le file système
Pour avoir le path où se trouve les controleurs, tu demandes au front.
$frontController = Zend_Controller_Front::getInstance();
$path->getControllerDirectory();
Ensuite tu fais une moulinette pour récupérer les fichiers qui se termine par Controller.php dans ce path.
Avec un petit RecursiveDirectoryIterator() et un RecursiveFilterIterator(), c'est assez vite fait. A partir de là, tu as la liste des fichiers, et depuis le nom du fichier, tu retrouve facilement le nom de la classe.
Fait juste attention au fait que 2 controleurs de même nom peuvent être dans 2 modules différents.
C'est quelque chose que j'ai déjà fait, si vraiment tu bloques, je peux te filer le code.
Dernière modification par TiTerm (08-02-2008 16:22:36)
Hors ligne
voila mon code
$rep = "./application/controllers/"; $dir = opendir($rep); while ($f = readdir($dir)) { if(is_file($rep.$f)) { $controlleur=explode(".",$f); $existenz=$this->existenz($controlleur[0]); if($existenz==0){ $this->nom_controlleur=$controlleur[0]; $this->save(); } }
alor sa me donne le nom des controller que je garde ds une table et apre je parcous al table pour aller chercher les action lié au controller merci de ton aide
Dernière modification par Mr.MoOx (08-02-2008 20:52:52)
Hors ligne
Avec une telle approche, tu peux simplifier en utilisant glob()
$controllers = glob("./application/controllers/*Controller.php");
Attention, ton approche n'étant pas récursive, si tu as des modules, cela ne fonctionnera pas.
Hors ligne
j'ai pas de modules
Merci
Hors ligne
par contre j'ai un pb $methods = get_class_methods($class); ne marche que dans le controller ou je l'execute et donc me retourne une erreur si je lui donne un autre controller comment faire ?
Merci
Hors ligne
Une fois que t'as la liste des controllers, il te suffit de parcourir le répertoire "/views/scripts/[nom de ton controller]/" (*) et tu auras la liste des ses actions (qui ont des vues, évidemment).
(*) modifie ce chemin pour qu'il soit en accord avec ton installation
Hors ligne
toute mes action non pas forcement une vue dc merci mais sa me servirai pas de faire cela , il me faut une autre solution .
Merci
Hors ligne
A la fonction get_class_methods() tu peux passer le nom d'une classe, donc en l'occurrence, une fois que tu as établis ta liste de contrôleur, tu appelles get_class_methods() avec le nom de chacun des contrôleurs de ta liste.
Hors ligne
C'est ce que je fais mais sa ne marche que pour le controller ou je lance la function . En somme j'ai un controller admin qui fait appel a une class controlleur qui comprend une function de recherche de controller qui fait appeler a une function de recherche d'action je lui passe en param la liste des controllers et pour le controller admin sa passe mais les autre nom il me dis que le premier argument passé en parametre n'est pas un tableau
Moi sa me parait logique que la function get_class_methods ne marche que pour le controlleur en cour puisque quand on regarde son fonctionnement il faut instancier uen classe et lui passer la classe en param . Hors si je lui passe juste le nom d'un controller comment elle peut savoir ou se situe se controller ( j'ai essayer de passer le chemin complet du controller aussi )
Dernière modification par lebilien (11-02-2008 10:13:59)
Hors ligne
Il va falloir faire des efforts de rédaction car tu es plutôt difficile à déchiffrer...
la fonction get_class_methods() peut prendre 2 types d'arguments. Soit une instance, soit un nom de classe.
Dans ton cas, puisque tu as normalement construit un tableau de nom de classe de contrôleur, tu vas utiliser un nom de classe.
Donc admettons que ton tableau soit
$tab = array ('totoController', 'titiController', 'tutuController'); $tabFile = array ( 'totoController' => 'path vers le fichier qui contient la class totoController', 'titiController' => 'path vers le fichier qui contient la class titiController', 'tutuController' => 'path vers le fichier qui contient la class tutuController', );
Tu fais donc un foreach sur ton tab
foreach ($tab as $class) { // La class n'est pas forcement chargée, il faut donc faire un include de la classe include_once($tabFile[$class]); $methods = get_class_methods($class); // la suite }
Dernière modification par TiTerm (11-02-2008 10:46:37)
Hors ligne
Je ferais plus attention dans l'avenir autant pour moi le lundis matin c'est dur lol au sinon en rajoutant tous simplement include_once($tabFile[$class]); avant l'appelle a la function get_class_methods($class); sa marche beaucoup merci de votre aide
Cordialement
Hors ligne