Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/08/2010, 16:59
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
arreglos de objetos

Hola,
estoy intentando hacer un cargador de "plugins" al estilo codeigniter para lo cual en mi controlador base hago lo siguiente:
Código PHP:
Ver original
  1. abstract class Controller {
  2. protected $Librerias = array();
  3. protected $Config;
  4. public function __construct() {
  5.         //creo una instancia de la configuración
  6.         $this->Config = Config::singleton();
  7. }
  8. public function libreria($nombre) {
  9.         if(empty($nombre)) {
  10.         return false;
  11.         }
  12.         if(is_array($nombre)) {
  13.         foreach($nombre as $plugin) {
  14.             //valido si existe el archivo de la libreria
  15.             if(!empty($plugin)) {
  16.             if(file_exists($this->Config->get('root').$this->Config->get('librerias').ucfirst($plugin).'.php')) {
  17.                 //valido si no esta instanciada la clase previamente
  18.                 if(!class_exists($plugin)) {
  19.                 include_once($this->Config->get('root').$this->Config->get('librerias').ucfirst($plugin).'.php');
  20.                 $this->Librerias[$plugin] = new $plugin();
  21.                 }
  22.                 else {
  23.                 $this->Librerias[$plugin] = $plugin;
  24.                 }
  25.  
  26.             }
  27.             else {
  28.                 $ruta = $this->Config->get('root').$this->Config->get('librerias').ucfirst($plugin).'.php';
  29.                 error_log("No se encuentra la libreria: {$plugin} en {$ruta}- ".date("F j, Y, G:i")."\n", 3,$this->Config->get('root').'/errores.log');
  30.                 trigger_error("No se encuentra la libreria: {$plugin} en {$ruta}<br/>",E_USER_NOTICE);
  31.                 return false;
  32.             }
  33.             }
  34.         }
  35.         }
  36.         else {
  37.         //valido si existe el archivo de la libreria
  38.         $nombre = ucfirst($nombre);
  39.         if(file_exists($this->Config->get('root').$this->Config->get('librerias').ucfirst($nombre).'.php')) {
  40.             //valido si no esta instanciada la clase previamente
  41.             if(!class_exists(ucfirst($nombre))) {
  42.             include_once($this->Config->get('root').$this->Config->get('librerias').ucfirst($nombre).'.php');
  43.             $this->Librerias[$nombre] = new $nombre();
  44.             }
  45.             else {
  46.             $this->Librerias[$nombre] =$nombre;
  47.             }
  48.  
  49.         }
  50.         else {
  51.             $ruta = $this->Config->get('root').$this->Config->get('librerias').ucfirst($nombre).'.php';
  52.             error_log("No se encuentra la libreria: {$nombre} en {$ruta} - ".date("F j, Y, G:i")."\n", 3,$this->Config->get('root').'/errores.log');
  53.             trigger_error("No se encuentra la libreria: {$nombre} en {$ruta}<br/>",E_USER_NOTICE);
  54.             return false;
  55.         }
  56.         }
  57.         return $this->Librerias;
  58.     }
  59. }

hasta ahi todo de maravillas, si yo despues en algun controlador quiero usarlo uso algo asi:
Código PHP:
Ver original
  1. public function index() {
  2.         if(!$this->Session->get('admin') || $this->Session->get('admin')=='admin') {
  3.             $data['mensaje']['mensaje']="No estas logueado";
  4.             $data['mensaje']['tipo']="attention";
  5.             $this->Vistas->show('login.html',$data);
  6.         }
  7.         else {
  8.             $data['breadCrumb']=$this->BreadCrumb->listarBreadCrumb($_REQUEST);
  9.             $data['fila']=$this->Librerias['prueba']->hola();
  10.             $this->Vistas->show('index.html',$data);
  11.         }

y me duelve en $data['fila'] "Hola mundo".

Bien mi consulta es como puedo hacer para que en vez de tener que llamar a las "librerias" de esta forma:
Código PHP:
Ver original
  1. $this->Librerias['prueba']->hola();

pueda llamarlas asi:
Código PHP:
Ver original
  1. $this->prueba->hola();

Espero que se haya entendido mi duda y desde ya muchas gracias