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

Ayuda con patron de diseño MVC en PHP

Estas en el tema de Ayuda con patron de diseño MVC en PHP en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos, soy nuevo en el foro y tengo un problemita y queria que me ayudacen, por favor! -Estoy tratando recien el tema de Sistema ...
  #1 (permalink)  
Antiguo 20/12/2009, 09:45
 
Fecha de Ingreso: diciembre-2009
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 0
Ayuda con patron de diseño MVC en PHP

Hola amigos, soy nuevo en el foro y tengo un problemita y queria que me ayudacen, por favor!
-Estoy tratando recien el tema de Sistema de Plantillas especificamente el patrón de diseño MVC(modelo-Vista- Controlador). En primer lugar tengo mi clase VO(value object . que representa a la trabla con sus columnas respectivas) el codigo es:
Código PHP:
Ver original
  1. <?php
  2. class DetalleVO {
  3.  
  4.     public $art_cod;
  5.     public $art_nom;
  6.     public $art_pre;
  7.     public $art_can;
  8.     public $total;
  9.    
  10.     public function __construct($cod, $nom, $pre, $can, $tot){
  11.       $this->art_cod = $cod;
  12.       $this->art_nom = $nom;
  13.       $this->art_pre=$pre;
  14.       $this->art_can = $can;
  15.       $this->total=$tot;
  16.     }
  17. }
  18. ?>

Ahora tengo el DAO (data acces object) que representa la persistencia. Dada un numero de factura que me devueva los productos que contiene factura
Código PHP:
Ver original
  1. <?php
  2.  
  3. require_once DIRECTORIO_RAIZ . "/clases/util/Conexion.class.php";
  4. require_once DIRECTORIO_RAIZ . "/clases/util/DAOExcepcion.class.php";
  5. require_once DIRECTORIO_RAIZ . "/clases/vo/DetalleVO.class.php";
  6.  
  7. class DetalleDAO {
  8.  
  9.     public function obtener($fac_num){
  10.     $resultado=array();
  11.         try{
  12.        
  13.         $cnx=Conexion::getInstancia();
  14.         $fac_num=$cnx->dbLink->qstr($fac_num);
  15.        
  16.         $query="select d.art_cod, a.art_nom, a.art_pre,d.art_can, a.art_pre*d.art_can as total";
  17.         $query.=" from articulos a, fac_deta d";
  18.         $query.= " where a.art_cod=d.art_cod and fac_num='%".$fac_num."%' group by d.art_cod, a.art_nom, a.art_pre,d.art_can;";    
  19.         $resultSet=$cnx->dbLink->Execute($query);
  20.        
  21.         if(!$resultSet){
  22.             throw new DAOExcepcion($cnx->dbLink->ErrorMsg());
  23.         }else{
  24.             while(!$resultSet->EOF){
  25.                 $resultado[]=new DetalleVo($resultSet->fields['art_cod'],
  26.                     $resultSet->fields['art_nom'],
  27.                     $resultSet->fields['art_pre'],
  28.                     $resultSet->fields['art_can'],
  29.                     $resultSet->fields['total']);
  30.                 $resultSet->MoveNext();
  31.             }                          
  32.         }
  33.         $resultSet->Close();
  34.         $cnx->dbLink->Close();
  35.         }catch(ConexionExcepcion $e){
  36.             throw new DAOExcepcion($e->getMessage());
  37.         }catch(DAOExcepcion $dao){
  38.             throw new DAOExcepcion($dao->getMessage());
  39.         }
  40.             return $resultado;
  41.                            
  42.         }
  43.            
  44. }
  45. ?>
Luego tengo un controlador que se encarga de las dos capas anteriores y que trabaja con la plantilla
Código PHP:
Ver original
  1. <?php
  2. require_once "conf.php";
  3. require_once "./clases/dao/DetalleDAO.class.php";
  4.  
  5. $accion =(!isset ($_REQUEST['accion']))?'': $_REQUEST['accion'];
  6. $tpl = new Savant3();
  7. $dao = new DetalleDAO();
  8.  
  9. switch ($accion){
  10. case 'detalle':
  11.         try{
  12.             $vo=$dao->obtener($_POST['fac_num']);
  13.             $tpl->detalle=$vo;
  14.             $tpl->display('/plantillas/detalle_listar.tpl.php');
  15.         }catch(DAOExcepcion $e){
  16.             $tpl->mensaje_error=$e->getMessage();
  17.             $tpl->display('/plantillas/detalle_listar.tpl.php');
  18.             return;
  19.         }
  20.     header("Location: detalles.php");
  21.         return;
  22.         break;
  23.     default:   
  24.     try {
  25.         $tpl->display('/plantillas/detalle_listar.tpl.php');
  26.     } catch(DAOExcepcion $e){
  27.         print "Problemas con su red.";
  28.     }
  29.  
  30.     return;
  31. }
  32. ?>
y por ultimo la plantilla que muestra los datos
Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7.  
  8. <body>
  9. <form id="form1" name="form1" method="post" action="detalles.php">
  10. <input type ="hidden" name="accion" value="detalle"/>
  11.   <p><strong><em>Detalle de Una Factura</em></strong></p>
  12.   <p>Factura
  13.     <label>
  14.     <input type="text" name="fac_num" />
  15.     </label>
  16.     <label>
  17.     <input type="submit" name="button" id="button" value="Buscar" />
  18.     </label>
  19.   </p>
  20.   </form>
  21.   <table width="399" border="1" cellspacing="1" cellpadding="3">
  22.     <tr>
  23.       <th width="64" scope="col">Codigo</th>
  24.       <th width="104" scope="col">Descripcion</th>
  25.       <th width="73" scope="col">Precio Unitario</th>
  26.       <th width="56" scope="col">Cantidad</th>
  27.       <th width="54" scope="col">Total</th>
  28.     </tr>
  29.          <tr>
  30.  <?php if(isset($_POST['fac_num']) && $_POST['fac_num']!=""){ foreach($this->detalle as $vo ){?>
  31.         <td><?php print $vo->art_cod;?></td>
  32.         <td><?php print $vo->art_nom;?></td>
  33.         <td><?php print $vo->art_pre;?></td>
  34.         <td><?php print $vo->art_can;?></td>
  35.         <td><?php print $vo->total;?></td>
  36.         </tr>
  37.         <?php }}?>  
  38.   </table>
  39.   <p>   Total de Importe
  40.     <label>
  41.     <input type="text" name="textfield2" id="textfield2" readonly="readonly" />
  42.     </label>
  43.   </p>
  44.  
  45.  
  46. <p>&nbsp;</p>
  47. </body>
  48. </html>

Luego que ingreso el número de factura y envio el formulario me salen dos errores:

Código HTML:
Ver original
  1. Notice: Undefined property: Savant3::$detalle in C:\wamp\www\Eclipse.projects\ProyectoVentas\plantillas\detalle_listar.tpl.php on line 30
  2.  
  3. Warning: Invalid argument supplied for foreach() in C:\wamp\www\Eclipse.projects\ProyectoVentas\plantillas\detalle_listar.tpl.php on line 30

Como les repito soy novato con el trabajo de plantillas, por favooor que alguien me ayude please!
  #2 (permalink)  
Antiguo 20/12/2009, 10:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda con patron de diseño MVC en PHP

pues el detalle esta en que sepas utilizar Savant3 ve a la pagina de dicha clase...

y lee todo lo que puedas acerca de su uso, por favor!!
(osea no vamos a aprender algo solo para enseñartelo, si tu puedes hacerlo solo)


suerte...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 20/12/2009, 10:33
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Ayuda con patron de diseño MVC en PHP

El notice dice que $this->detalle no existe

El warning dice que el argumento del foreach ($this->detalle) es invalido porque no es un array (problema arrastrado por el notice anterior)

Saludos
  #4 (permalink)  
Antiguo 20/12/2009, 11:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Tema movido desde PHP a PHP orientado a objetos
  #5 (permalink)  
Antiguo 20/12/2009, 11:39
 
Fecha de Ingreso: diciembre-2009
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Ayuda con patron de diseño MVC en PHP

Wow si que contestan rapido

Cita:
pues el detalle esta en que sepas utilizar Savant3 ve a la pagina de dicha clase...

y lee todo lo que puedas acerca de su uso, por favor!!
el problema no es del savant de eso si estoy seguro tengo un par de aplicaciones utilizando e savant3 y no he tenido que leer nada; Gracias de todos modos

y con respecto a
Cita:
El notice dice que $this->detalle no existe

El warning dice que el argumento del foreach ($this->detalle) es invalido porque no es un array (problema arrastrado por el notice anterior)

Saludos
Eso si , pero me pudieras dar una mano revisando esta funcion (ya citada arriba) creo que por aca anda algo mal
Código PHP:
Ver original
  1. public function obtener($fac_num){
  2.     $resultado=array();
  3.         try{
  4.        
  5.         $cnx=Conexion::getInstancia();
  6.         $fac_num=$cnx->dbLink->qstr($fac_num);
  7.        
  8.         $query="select d.art_cod, a.art_nom, a.art_pre,d.art_can, a.art_pre*d.art_can as total";
  9.         $query.=" from articulos a, fac_deta d";
  10.         $query.= " where a.art_cod=d.art_cod and fac_num='%".$fac_num."%' group by d.art_cod, a.art_nom, a.art_pre,d.art_can;";    
  11.         $resultSet=$cnx->dbLink->Execute($query);
  12.        
  13.         if(!$resultSet){
  14.             throw new DAOExcepcion($cnx->dbLink->ErrorMsg());
  15.         }else{
  16.             while(!$resultSet->EOF){
  17.                 $resultado[]=new DetalleVo($resultSet->fields['art_cod'],
  18.                     $resultSet->fields['art_nom'],
  19.                     $resultSet->fields['art_pre'],
  20.                     $resultSet->fields['art_can'],
  21.                     $resultSet->fields['total']);
  22.                 $resultSet->MoveNext();
  23.             }                          
  24.         }
  25.         $resultSet->Close();
  26.         $cnx->dbLink->Close();
  27.         }catch(ConexionExcepcion $e){
  28.             throw new DAOExcepcion($e->getMessage());
  29.         }catch(DAOExcepcion $dao){
  30.             throw new DAOExcepcion($dao->getMessage());
  31.         }
  32.             return $resultado;
  33.                            
  34.         }
Si me pudieran dar una pista les agradeceria muchisimo!
  #6 (permalink)  
Antiguo 20/12/2009, 17:08
 
Fecha de Ingreso: diciembre-2009
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Ayuda con patron de diseño MVC en PHP

Bueno les cuento que lo solucione ! , parece que el error estaba aca jeje
Código PHP:
Ver original
  1. $query="select d.art_cod, a.art_nom, a.art_pre,d.art_can, a.art_pre*d.art_can as total from articulos a, fac_deta d where a.art_cod=d.art_cod and fac_num= $fac_num group by d.art_cod , a.art_nom , a.art_pre , d.art_can";

Gracias a todos
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 03:06.