Répertoire de codes source
Lister automatiquement tous les modules, controllers et actions ... | |
---|---|
déposé par scramatte le 16/02/2008 nombre de visites : 6013 |
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; } } ?> |
|