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 //
////////////////////////////////////////////////////////////////////////////
}