session = Session::instance(); // Aumentar el cubrimiento del autoload // spl_autoload_register(array('Kohana', 'auto_load')); spl_autoload_register(array('Controller', 'auto_load')); // Realizar la autenticación del usuario $uri_enrrutado = Router::$routed_uri; $ruta_controlador = Router::$controller_path; $controlador = Router::$controller; $accion = Router::$method; $argumentos = Router::$arguments; $sufijo = Router::$url_suffix; /* echo "uri enrrutado = " . $uri_enrrutado . "
"; echo "ruta = " . $ruta_controlador . "
"; echo "controlador = " . $controlador . "
"; echo "accion = " . $accion . "
"; echo "argumentos = " . $argumentos . "
"; echo "sufijo = " . $sufijo . "
"; */ } //////////////////////////////////////////////////////////////////////////// // Busca recursivamente un $archivo en un $directorio específico private static function buscarArchivo($directorio, $archivo) { // Si fue posible acceder al directorio especificado if ($handle = opendir($directorio)) { // Verifica cada una de sus entradas while (false !== ($file = readdir($handle))) { // Evita las referencias a los directorios actual y superior if ($file == "." || $file == "..") continue; // Obtiene el path completo del archivo $entrada = $directorio . DIRECTORY_SEPARATOR . $file; // Si el registro actual NO es un directorio ... if(!is_dir($entrada)) { // Verifica si es el $archivo objetivo, de lo // contrario continúa if(strcmp($file, $archivo) == 0) { // Incluye el archivo fuente requerido include_once($entrada); // Indica el éxito en la búsqueda return true; } } else { // En caso de que sea un directorio, realiza la // búsqueda solicitada recursivamente $recursivo = self::buscarArchivo($entrada, $archivo); // Si la búsqueda recursiva (rama) retorna un éxito, // este nodo también lo reporta terminando su ejecución if($recursivo !== false) return $recursivo; } } closedir($handle); } // Se reporta la falta de éxito en la búsqueda return false; } //////////////////////////////////////////////////////////////////////////// // Es llamado cada vez que se busca una clase que no ha sido encontrada // en las ubicaciones estándar. Su utilidad radica en poder incluír otras // ubicaciones como subdirectorios recursivos dentro de Models. public static function auto_load($clase) { //////////////////////////////////////////////////////////////////////// // Obtiene el sufijo de la clase y el nombre de archivo a buscar $archivo = null; $sufijo = null; $separador = strrpos($clase, "_"); // Si no tiene prefijo no se sabrá por donde enrrutar la búsqueda if($separador === false) return false; else { // Obtener el sufijo $archivo = strtolower(substr($clase, 0, $separador)); $sufijo = strtolower(substr($clase, $separador + 1)); } //////////////////////////////////////////////////////////////////////// // Determina el directorio en el cual se deberá realizar la búsqeda // del archivo que contiene la clase requerida $directorio = null; switch($sufijo) { case 'model': $directorio = getcwd() . DIRECTORY_SEPARATOR . "application" . DIRECTORY_SEPARATOR . "models" . DIRECTORY_SEPARATOR; break; /* case 'controller': break; case 'core': break; */ // Si el sufijo no era conocido falla la auto carga default: return false; break; } //////////////////////////////////////////////////////////////////////// // Busca el archivo requerido bajo la ruta establecida $ubicacion = self::buscarArchivo($directorio, $archivo . ".php"); } //////////////////////////////////////////////////////////////////////////// // Métodos comunes a todos los controladores // //////////////////////////////////////////////////////////////////////////// }