/** * Devuelve la lista de los nombres de todas las clases de modelo de una aplicacion, * incluso si estan en subdirectorios. */ public static function getModelClasses($app) { // el directorio del modelo es fijo, pero lo tengo que sacar de una configuracion, no hardcoded aca. //$apps = PackageNames::getAppNames(); $classNames = array(); $package = "{$app}/model"; // TODO: si hay subdirectorios, devolverlos tambien. $model_path = YuppConventions::getModelPath($package); // La aplicacion puede no tener directorio de model //if (file_exists($model_path)) //{ // $_classNames = FileSystem::getFileNames($model_path, PackageNames::MODEL_FILE_REGEXP, array( PackageNames::MODEL_CLASS_GROUP )); // Todos los php del paquete utils, idem anterior, ahora sin el "utils." // $classNames = array_merge($classNames, $_classNames); //} if (file_exists($model_path)) { $classNamesRecur = self::getModelClassesRecursive($model_path); $classNames = array_merge($classNames, $classNamesRecur); } // Levanta el directorio y los nombres de las clases. // Grupo 1 es el nombre de la aplicacion // Grupo 2 es el nombre de la clase // TODO: LA REGEXP DEL PAQUETE DE MODELO ME LO DEBERIA DAR UNA CLASE RESPONSABLE DE SABER CUALES SON LAS REGEXPS DE LOS PAQUETES DESTACADOS Y DADO UNA RUTA DE PAQUETES SABER DE QUE TIPO ES (modulos, core, modelo, vistas, acciones, etc.) // Los nombres estan codificados segun algun estandar (a definir) y se puede sacar el nombre de la clase del nombre del archivo. // NOMBRES: modelDir/app.ClassName.php return $classNames; }
/** * Hace el include en las clases ya cargadas. * En ludar de tener que ir al filesystem para cargar las clases del modelo, * las carga de la memoria. */ public static function refresh() { $cl = YuppLoader::getInstance(); // FIXME: no recarga las clases del modelo que estan en subdirectorios! foreach ($cl->loadedClasses as $classInfo) { $package = $classInfo['package']; $path = "."; if (PackageNames::isModelPackage($package)) { $path = YuppConventions::getModelPath($package); } else { $path = strtr($package, ".", "/"); } $incPath = $path . "/" . $classInfo['filename']; if (!is_file($incPath)) { // FIXME: si se tira excepcion, me pasa que al mover archivos me da errores y tengo que borrar la sesion. // igualmente en este caso deberia avisar de alguna forma de que no se encuentra una ruta de inclusion, // por ejemplo haciendo log a disco. Tambien se podria sacar la entrada incorrecta. //throw new Exception("YuppLoader::refresh() - ruta de inclusion errada ($incPath)"); } else { include_once $incPath; } } }