Foros del Web » Creando para Internet » Herramientas y Software »

IDES + completado + framework

Estas en el tema de IDES + completado + framework en el foro de Herramientas y Software en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 30/12/2012, 16:25
Avatar de 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
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!
  #2 (permalink)  
Antiguo 30/12/2012, 16:58
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: IDES + completado + framework

yo lo eh logrado con Zend Studio, solo que debes comentar cada variable con lo que corresponde ej.
Código PHP:
Ver original
  1. class Clase{
  2.     /**
  3.      * @var Clase_de_la_tabla
  4.      */
  5.     private $_table;
  6. }
y asi cuando usaba la variable $_table me traia los métodos de la clase "Clase_de_la_tabla", si no lo tenia comentado no me traia nada. Eso en Zend Studio, más no se si funcione en PHPStorm
__________________
>> abimaelmartell.com
  #3 (permalink)  
Antiguo 30/12/2012, 17:14
Avatar de 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
Respuesta: IDES + completado + framework

Lo probé pero no funciono, supongo que debe ser porque al usar el método load estoy creando dinámicamente la clase del modelo y no directamente $nombre = new ClaseModelo();
  #4 (permalink)  
Antiguo 30/12/2012, 17:20
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: IDES + completado + framework

Tema movido desde Frameworks y PHP orientado a objetos a Editores Web.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 30/12/2012, 17:27
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: IDES + completado + framework

Uno de los tantos problemas que tiene hacer algo semejante de todas formas puedes intentar con el docblock inline

Código PHP:
Ver original
  1. /* @var $object FooClass */
  2. $object = $this->load('FooClass');

nunca utilice el IDE que tu comentas pero el dinosaurio de Zend Studio 10 te permite bindear al locator directamente no se si tu IDE tendrá algo semejante.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 30/12/2012, 19:58
Avatar de 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
Respuesta: IDES + completado + framework

Cita:
Iniciado por masterpuppet Ver Mensaje
Uno de los tantos problemas que tiene hacer algo semejante de todas formas puedes intentar con el docblock inline

Código PHP:
Ver original
  1. /* @var $object FooClass */
  2. $object = $this->load('FooClass');

nunca utilice el IDE que tu comentas pero el dinosaurio de Zend Studio 10 te permite bindear al locator directamente no se si tu IDE tendrá algo semejante.

Saludos.
Entiendo tu ejemplo, pero en mi caso yo no estoy instanciando la clase en un variable, sino que en el load ahí instancio la clase con el nombre que paso como parametro
Código PHP:
Ver original
  1. public function modelo($nombre) {
  2. .....
  3. $this->$modelo = new $modelo();

onda como que despues en los controladores cuando llamo al load, no sabe que le estoy cargando como para traer los métodos de los modelos.
Espero haberme explicado mejor ahora.
Salu2
  #7 (permalink)  
Antiguo 30/12/2012, 20:12
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: IDES + completado + framework

Es que en ese caso debería funcionar con el docblock tradicional, probaste con @var o @property ?

@var
Código PHP:
Ver original
  1. class Foo
  2. {
  3.     /**
  4.      * @var Bar $bar
  5.      */
  6.     private $bar;
  7. }

@property
Código PHP:
Ver original
  1. /**
  2.  * @property $bar Bar
  3.  */
  4. class Foo
  5. {
  6.     private $bar;
  7. }
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: clase, framework, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:54.