cesarpunk (muy copado tu nic punk not dead!!!),
Te cuento como lo hice yo en mi framework (que no quita que sea la manera correcta).
En el frontcontroller, solo dejo la lógica para saber que controller ejecutar y configurar algunos parametros como la ruta por defult de las vistas (mi controladores tienen una carpeta template con las vistas, en vez de tenerlas todas en un solo lugar para todos ellos, cuestion de gustos jeje).
Despues en mi clase "Controller", lo que hago es 2 cosas (que ahora que lo pienso puede ser medio redundante jeje), en el constructor tengo esto:
Código PHP:
Ver original$this->Utilidades->recursiveInclude($this->Config->get('path_root').$this->Config->get('modelsFolder'));
el método recursiveInclude es asi:
Código PHP:
Ver originalpublic function recursiveInclude($path) {
$config = Config::singleton();
foreach($dir as $k => $v)
include_once($path.$v);
elseif ( is_dir($path.$v) && ($v != ".") && ($v != "..") && ($v != 'smarty') && ($v != '.svn')) recursiveInclude($path.$v."/");
}
}
que lo que hace es cargar todos los archivos php de un directorio por ejemplo "modelos".
Después en tus controladores tiene que instanciar los modelos:
Código PHP:
Ver originalprivate $cliente;
function __construct(){
$this->cliente = new ClienteModelo();
}
pero despues hice un método en el Controller que permite como CI o cake cargar de manera independiente uno o varios modelos, helpers, etc. que es asi:
Código PHP:
Ver originalpublic function modelo($nombre) {
return false;
}
foreach($nombre as $modelo) {
//valido si existe el archivo del modelo
if(file_exists($this->Config->get('root').$this->Config->get('modelsFolder').$modelo.'Model.php')) { //valido si no esta instanciada la clase previamente
include_once($this->Config->get('root').$this->Config->get('modelsFolder').$modelo.'Model.php');
$this->$modelo = new $modelo();
}
else {
$this->$modelo = new $modelo();
}
}
else {
$ruta = $this->Config->get('root').$this->Config->get('modelsFolder').$modelo.'Model.php';
error_log("[".date("F j, Y, G:i")."] [Error: E_USER_NOTICE] [tipo modelos] No se encuentra el modelo: {$modelo} en {$ruta}- \n", 3,$this->Config->get('root').'/errores.log');
return false;
}
}
}
}
else {
//valido si existe el archivo de la libreria
if(file_exists($this->Config->get('root').$this->Config->get('modelsFolder').$modelo.'Model.php')) { //valido si no esta instanciada la clase previamente
include_once($this->Config->get('root').$this->Config->get('modelsFolder').$modelo.'Model.php');
$this->$modelo = new $modelo();
}
else {
$this->$modelo = new $modelo();
}
}
else {
$ruta = $this->Config->get('root').$this->Config->get('modelsFolder').$modelo.'Model.php';
error_log("[".date("F j, Y, G:i")."] [Error: E_USER_NOTICE] [tipo modelos] No se encuentra el modelo: {$modelo} en {$ruta}\n", 3,$this->Config->get('root').'/errores.log'); //trigger_error("No se encuentra la libreria: {$nombre} en {$ruta}<br/>",E_USER_NOTICE);
return false;
}
}
}
con eso desde el controlador podes hacer esto:
Código PHP:
Ver originalfunction __construct(){
$this->modelos('clientes');
//o hacerlo asi:
// $this->modelos(array('clientes','proveedores','otromodelo'));
}
// y usarlo asi:
public function index(){
$this->clientes->metodoDelModelo();
}
esto que yo aplique a los modelos, podes aplicarlo a lo que te convenga, podes usar el mismo código y sólo tenes que cambiar la ruta a donde buscar y listo.
No se si es la mejor forma, pero a mi me funciona de maravillas.
Salu2