Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/12/2012, 16:25
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
IDES + completado + framework

Buenas,
tengo una consulta "teórico/practica" se podría decir jaja. Actualmente estoy usando phpstorm como ide para desarrollo, pero no logro hacer que me traiga los métodos de mis modelos para hacer el autocompletado de código que tanto "amamos" mi modelo base es asi:
Código PHP:
Ver original
  1. /**
  2.  * @package Punk Framework
  3.  * @copyright Copyright (C) 2011 Onírico Sistemas. Todos los derechos reservados.
  4.  * @version 0.3
  5.  * @author Lucas M. Sastre
  6.  * @link http://www.oniricosistemas.com
  7.  * @name Modelo.php
  8.  *
  9.  * @property Database $db
  10.  * @property Config $config
  11.  */
  12. abstract class Modelo {
  13.  
  14.     protected $table;
  15.     protected $keyField;
  16.     protected $db;
  17.     protected $fields = array();
  18.     protected $sql;
  19.     private $_columns;
  20.     private $Config;
  21.     private $seteados = 0;
  22.     public $error = '';
  23.     public $ultimoId;
  24.  
  25.     /**
  26.      * Contructor
  27.      *
  28.      * @access Public
  29.      * @version 0.2
  30.      */
  31.     public function __construct() {
  32.         $this->db = Database::singleton();
  33.         $this->Config = Config::singleton();
  34.         $this->debug = firePHP::getInstance();
  35.         $this->sql = '';
  36.         $this->iniciar();
  37.     }
  38.  
  39.     /**
  40.      * inicia el ORM
  41.      * @version 0.1
  42.      * @author Lucas M. sastre
  43.      * @access protected
  44.      * @name iniciar
  45.      *
  46.      */
  47.     protected function iniciar() {
  48.         //si no hay seteada una tabla corto el proceso y muestro el error.
  49.         if (!$this->table) {
  50.             error_log("[" . date("F j, Y, G:i") . "] [E_USER_NOTICE] [tipo Modelo] No se seteo ninguna tabla para el modelo: " . get_class($this) . "\n", 3, $this->Config->get('root') . '/errores.log');
  51.             die('No se seteo ninguna tabla para el modelo: ' . get_class($this));
  52.         }
  53.  
  54.         //obtengo los campos de la tabla
  55.         $query = "SHOW FIELDS FROM " . $this->table;
  56.         $command = $this->db->QueryArray($query);
  57.         $fields = array();
  58.         $primary = '';
  59.  
  60.         //recorro los campos y los guardo en un arrgeglo
  61.         for ($i = 0; $i < count($command); $i++) {
  62.             $fields[$command[$i]['Field']] = array(
  63.                 "name" => $command[$i]['Field'],
  64.                 "type" => $command[$i]['Type'],
  65.                 "defaultValue" => $command[$i]['Default'],
  66.                 "key" => $command[$i]['Key'],
  67.             );
  68.             //obtengo la clave primaria
  69.             if ($command[$i]['Key'] === "PRI") {
  70.                 $primary = $command[$i]['Field'];
  71.             }
  72.             $this->fields[$command[$i]['Field']] = '';
  73.         }
  74.  
  75.         $this->_columns = $fields;
  76.  
  77.         if (empty($primary)) {
  78.             throw new Exception("No se encontro la columna clave para la tabla: " . $this->table);
  79.         }
  80.  
  81.         $this->keyField = $primary;
  82.     }
  83. ......
un ejemplo de modelo sería asi:
Código PHP:
Ver original
  1. class ConfiguracionSitio extends Modelo {
  2.  
  3.         protected $table = "core_configuracion";
  4. }

el autoload de los modelos es asi:
Código PHP:
Ver original
  1. /**
  2.      * Método para cargar los modelos
  3.      *
  4.      * @version 0.1
  5.      * @author Lucas M. sastre
  6.      * @access public
  7.      *
  8.      * @param <string> $nombre
  9.      * @return <void>
  10.      * @property @var $nombre $nombre
  11.      */
  12.     public function modelo($nombre) {
  13.         if(empty($nombre)) {
  14.             return false;
  15.         }
  16.  
  17.         if(is_array($nombre)) {
  18.             foreach($nombre as $modelo) {
  19.                 $modelo = ucfirst($modelo);
  20.                 //valido si existe el archivo del modelo
  21.                 if(!empty($modelo)) {
  22.                     if(file_exists($this->Config->get('path_root').$this->Config->get('modelsFolder').$modelo.'Model.php')) {
  23.                         //valido si no esta instanciada la clase previamente
  24.                         if(!class_exists($modelo)) {
  25.                             include_once($this->Config->get('path_root').$this->Config->get('modelsFolder').$modelo.'Model.php');
  26.                             $this->$modelo = new $modelo();
  27.                         }
  28.                         else {
  29.                             $this->$modelo = new $modelo();
  30.                         }
  31.  
  32.                     }
  33.                     else {
  34.                         $ruta = $this->Config->get('path_root').$this->Config->get('modelsFolder').$modelo.'Model.php';
  35.                         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('path_root').'/errores.log');
  36.  
  37.                         return false;
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.         else {
  43.             //valido si existe el archivo del modelo
  44.             $modelo = ucfirst($nombre);
  45.             if(file_exists($this->Config->get('path_root').$this->Config->get('modelsFolder').$modelo.'Model.php')) {
  46.                 //valido si no esta instanciada la clase previamente
  47.                 if(!class_exists(ucfirst($modelo))) {
  48.                     include_once($this->Config->get('path_root').$this->Config->get('modelsFolder').$modelo.'Model.php');
  49.                     $this->$modelo = new $modelo();
  50.                 }
  51.                 else {
  52.                     $this->$modelo = new $modelo();
  53.                 }
  54.             }
  55.             else {
  56.                 $ruta = $this->Config->get('path_root').$this->Config->get('modelsFolder').$modelo.'Model.php';
  57.                 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('path_root').'/errores.log');
  58.                 return false;
  59.             }
  60.         }
  61.     }

y los llamo de esta manera en los controladores:
Código PHP:
Ver original
  1. $this->modelo(array('configuracionSitio','configuracionContenidoSitio','Lenguajes'));

para poder usarlos asi:
Código PHP:
Ver original
  1. $this->ConfiguracionSitio->busar();

Bien el problema que estoy teniendo es que cuando escribo en el editor $this->ConfiguracionSitio-> no me muestra los métodos del modelo. Conversando con un compañero de trabajo me dice que es sucede porque las clases estan mal creadas ya que si estuvieran bien creadas cualquier editor debería devolverme los métodos. Tiene razon mi compañero? hay forma de corregir esto?
Desde ya muchas gracias!