Répertoire de codes source

Lister automatiquement tous les modules, controllers et actions ...
déposé par scramatte
le 16/02/2008
nombre de visites : 5931

Cette class set a lister automatiquement tous les modules, controllers et actions ...

Très utile pour pour pouvoir créer une interface de gestions des ACLs.

En espérant que vous trouverez ça utile ;) ... Faites le moi savoir si vous utilisez cette classe ! 

 

<?php 
/**
 * Concentre
 * 
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://concentre.zensoluciones.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * Please let me know if you use this package. I will be happy to know that is usefull ;)
 * 
 * @category   Concentre
 * @package	   Concentre_Modules
 * @copyright  2008 (c) Sébastien Cramatte <scramatte@zensoluciones.com>
 */
 
class Concentre_Modules {
 
 
  /**
   * Return list of all modules, controllers and actions
   *
   * @param  string $modulesPath Optional; defaults to '../application'
   * @return array
   */
   public static function getList($modulesPath='../application/') {
 
   		$result = array();
   		$result['modules'] = array();
 
   		try {
 
   			$modules = new DirectoryIterator($modulesPath);
 
   			// iterate through modules lists
			foreach ($modules as $m) {
	        		if ($m->isDir() && !preg_match('/^\.+/',$m)) {
 
	                		$moduleName = $m->getFilename();
 
	                		// controller must be stored in "controllers" directory 
	                		$controllersPath = $modulesPath.'/'.$moduleName.'/controllers/';
 
 
	                		$controllers = new DirectoryIterator($controllersPath);
 
		        			$module = array();
	                		$module['name'] = $moduleName;
	                		$module['controllers'] = array();
 
	                		foreach ($controllers as $c) {
 
		                		// search for ended by "Controller.php" filenames 
								if ($c->isFile() && preg_match('/(.+Controller).php$/',$c->getFilename(),$matches)) {
 
	        						$className = ucfirst($matches[1]);
	        						$fullClassName = $moduleName=='default'?$className:ucfirst($moduleName).'_'.$className;
 
 
	        						if ($className) {
 
	        								// avoid throwing error when iterate throught the current controller
											if (!class_exists($fullClassName)) {	        							
			                					Zend_Loader::loadFile("$className.php", $controllersPath);
											}
 
		        							$class = new ReflectionClass( $fullClassName );
 
		        							$controller = array();
											$controller['name'] = strtolower($className);						
 
 
											$actions = array();
		        							$methods = $class->getMethods();
		        							foreach ($methods as $mm) {
		        								if (preg_match('/(.+)Action$/',$mm->name,$matches)) {
 
		        									$actionName =  $matches[1];
		        									$actions[] = $actionName;
 
		        								}
		        							}
 
		        							$controller['actions'] = $actions;
		        							$controller['count'] = count($actions);
 
									}
 
		       					$module['controllers'][] = $controller;
		       					$module['count'] = count($module['controllers']);
 
	        					}
 
 
	                		}
 
	                		$result['modules'][] = $module;
	        		}
 
	        		$result['count'] = count($result['modules']); 
 
			}
 
   		} catch (Exception  $e) {
		 	echo $e->getMessage();
		}
 
		return $result;
   	}
}
 
?>
Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages