Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO modelos y helpers

Estas en el tema de modelos y helpers en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, en mi framework cree un método para cargar "herlpers", algo parecido como lo hace codeigniter, todo anda bien, pero ahora me salta un problema ...
  #1 (permalink)  
Antiguo 01/11/2010, 10:39
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
modelos y helpers

Hola,
en mi framework cree un método para cargar "herlpers", algo parecido como lo hace codeigniter, todo anda bien, pero ahora me salta un problema cuando necesito usar modelos, la idea es no tener que hacer las consultas sql en el helper sino poder usar los modelos necesarios y sus métodos (no se si esto es lo mas correcto pero en fin). El tema esta que cuando incluyo el modelo dentro de una de las funciones del helper me sale este mensaje:
Cita:
Fatal error: Using $this when not in object context in C:\xampp\htdocs\kiosco\modelos\ProductosModel.php on line 192
y no se como solucionarlo....

El código del método del modelo donde arroja el error es:
Código PHP:
Ver original
  1. class Productos extends Modelo {
  2. .....
  3. /**
  4.      * devuelve los productos que tenga un stock minimo o igual
  5.      * al tope de alerta
  6.      *
  7.      * @return <array>
  8.      */
  9.     public function alertasProductos(){
  10.         $sql="SELECT * FROM productos WHERE stock <= alerta AND stock!=0";
  11.         $consulta = $this->db->QueryArray($sql); //esta es la linea 192
  12.         if(!$consulta) {
  13.         $consulta = $this->db->Error();
  14.         }
  15.         return $consulta;
  16.     }
  17.  
  18. }

el helper es:
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * alertas
  4.  *
  5.  * crea los mensajes de alerta cuando un producto llega al limite minimo de stock
  6.  *
  7.  * @access  public
  8.  * @return  mixed   depends on what the array contains
  9.  */
  10. if ( ! function_exists('alerta'))
  11. {
  12.     function alerta()
  13.     {      
  14.        
  15.         $array = Productos::alertasProductos();
  16.  
  17.         return $array;
  18.     }  
  19. }
  20.  
  21. // ------------------------------------------------------------------------
  22. ?>

si necesitan ver el código de como se cargan los herlpers me dicen y lo pongo.

Alguna idea para solucionar esto??? o como se puede mejorar?

desde ya muchas gracias
  #2 (permalink)  
Antiguo 01/11/2010, 10:50
 
Fecha de Ingreso: noviembre-2008
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: modelos y helpers

Hola Destor77. Te voy a contestar, pero no estoy 100% seguro de lo que te voy a respoder, asi que solo.. va como idea.

Yo he tenido también problemas al trabajar con helpers y modelos. Creo, quizás, que un helper trabaja con los datos ya definidos. Es decir, en un helper view podemos trabajar cosas genericas de las vistas pero los datos ya debierán estar listos para presentarse. Entonces, eso que haces en el helper llamando a alertasProductos, seguro te andará bien si lo haces en el controller, y luego por ejemplo dejas el resultado en una variable Register. Ahi la podrás tomar sin problemas en el helper.

Bueno, veremos si alguno con más conocimiento te orienta mejor. Saludos.
  #3 (permalink)  
Antiguo 01/11/2010, 11:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: modelos y helpers

en realidad estas usando $this para un objeto que no has instanciado con new, pues tu método lo usas como estático y no lo es...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 01/11/2010, 11:17
 
Fecha de Ingreso: noviembre-2008
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: modelos y helpers

pero Pateketrueke, ¿puedes usar modelos de datos libremente en los helpers? o a instancias de invocar a un helper, debes tener todo lo que refiere a datos ya trabajado?
  #5 (permalink)  
Antiguo 01/11/2010, 11:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: modelos y helpers

Cita:
Iniciado por maue75 Ver Mensaje
pero Pateketrueke, ¿puedes usar modelos de datos libremente en los helpers? o a instancias de invocar a un helper, debes tener todo lo que refiere a datos ya trabajado?
si se puede, el problema es que no se puede usar $this dentro de un método estático!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 01/11/2010, 11:26
 
Fecha de Ingreso: noviembre-2008
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: modelos y helpers

Aha. :) bien, gracias Pateketrueke.
  #7 (permalink)  
Antiguo 01/11/2010, 13:23
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: modelos y helpers

el tema esta que si instancio el modelo asi:
Código PHP:
Ver original
  1. if ( ! function_exists('alerta'))
  2. {
  3.     function alerta()
  4.     {
  5.         $config = Config::singleton();
  6.         include ($config->get('root').$config->get('modelsFolder')."ProductosModel.php");
  7.         $prod = new Productos();
  8.         $array = $prod->alertasProductos();
  9.  
  10.         return $array;
  11.     }  
  12. }

me sale:
Cita:
Fatal error: Cannot redeclare class Productos in C:\xampp\htdocs\kiosco\modelos\ProductosModel.php on line 214
alguna sugerencia?
  #8 (permalink)  
Antiguo 01/11/2010, 14:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: modelos y helpers

Usa un include_once y/o require_once.

Saludos.

Etiquetas: modelos
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 17:36.