IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

Lister tous les contrôleurs dispo dans une application [ZF 1.9]


Sujet :

MVC PHP

  1. #1
    Membre régulier Avatar de cyrille37
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 155
    Points : 120
    Points
    120
    Par défaut Lister tous les contrôleurs dispo dans une application
    Bonjour,

    Pour faciliter la configuration des ACLs et la construction des menus à l'aide d'UI, je souhaiterais établir par code la liste de tous les contrôleurs et actions disponibles pour une application (en prenant en compte aussi les modules évidement).

    Je n'ai pas trouvé avec google, alors je suis en train de chercher un moyen en lisant le code source de ZF...
    En attendant d'avoir fini cette lecture, je viens à vous pour le cas où quelqu'un aurais des idées voir même une solution toute faite ;-)

    Merci
    Cyrille

  2. #2
    Membre régulier Avatar de cyrille37
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 155
    Points : 120
    Points
    120
    Par défaut
    Ok, c'est trouvé :
    1. On demande les chemins des controleurs FrontController
    2. On parcours les fichiers
    3. Par réflexion on trouve les classes
    4. et les actions


    Voici le code, pas mis en forme, c'était juste pour trouver la méthode, maintenant il reste à mettre tout ça dans une fonction pour faire le job.

    le code suivant est exécuté dans une action d'un controller.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
        	$zcf = $this->getFrontController();
        	// Lister tous les controleurs disponibles pour l'application et ses modules
     
        	$zcf = $this->getFrontController();
        	//Zend_Debug::dump($zcf, 'FrontController:');
     
        	$defaultModuleName = $zcf->getDefaultModule();
     
        	$dirs = $zcf->getControllerDirectory();
        	Zend_Debug::dump($dirs, 'Folders des controllers:');
     
        	$matches = null ;
        	foreach( $dirs as $modName => $modControllersPath )
        	{
        		echo '<p>Module: '.$modName.'</p>';
        		echo '<ul>';
    		    if( $dh = opendir($modControllersPath) )
    		    {
    		        while( ($file = readdir($dh)) !== false )
    		        {
    		        	if( preg_match('/(.*Controller).php$/', $file, $matches ) )
    		        	{
    		            	$ctrlClassName = $matches[1] ;
    		            	echo '<li>Controller class: '.$ctrlClassName;
    		            	$filePath = $modControllersPath.DIRECTORY_SEPARATOR.$file ;
    		            	if( $modName != $defaultModuleName )
    		            	{
    		            		$ctrlClassName = $modName.'_'.$ctrlClassName ;
    		            	}
     
    		            	if( ! class_exists($ctrlClassName) )
    		            	{
    			            	require($filePath);
    			            	$fileReflect = new Zend_Reflection_File($filePath);
    			            	// Ici il peut y avoir un problème de nom de classe
    			            	// causé par un problème de casse de caractère.
    			            	$class = $fileReflect->getClass($ctrlClassName);
    		            	}
    		            	else
    		            	{
    		            		$class = new Zend_Reflection_Class( $ctrlClassName );
    		            	}
     
    					$methods = $class->getMethods();
    					//Zend_Debug::dump($methods);
    					echo '<br/>Actions:';
    					echo '<ul>';
    					foreach( $methods as $k => $methodInfo )
    					{
    					if( preg_match('/(.*)Action$/',$methodInfo->name,$matches) )
    					{
    						$actionName = $matches[1];
    						echo '<li>'.$actionName.'</li>';
    					}
    					}
    					echo '</ul>';
    					echo '</li>';
    		        	}
    		        }
    		        closedir($dh);
    		    }
        		echo '</ul>';
     
        	}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/09/2008, 12h32
  2. Les composants TDB dans une application MDI
    Par soft_balade dans le forum Débuter
    Réponses: 3
    Dernier message: 14/06/2008, 21h39
  3. Réponses: 4
    Dernier message: 28/03/2007, 13h47
  4. Réponses: 7
    Dernier message: 24/04/2006, 15h48
  5. Tous les champs SAUF dans une table.
    Par Yepazix dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/08/2005, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo