Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/09/2010, 12:11
nicostone
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 4 meses
Puntos: 1
Problema y Duda MVC

Hola amigos me ha surgido un problema a querer aplicar el patron MVC en PHP Puro, la aplicacion al principio no la hice utilizando este patron y estoy aprendiendo el patron, asique cualquier sugerencia se las agradezco muchisimo.

Por lo que he leido les comento como es mi idea, tengo un archivito producto.phpque es quien maneja por asi decirlo todo el tema de los productos, es decir jugando con los GETs con $_GET[Opreacion] y GET[Accion] manejo todo las posibilidades con los productos (Busqueda, Alta, Modificacion, etc.) y depende lo que contengan los GETS se llama al metodo de la clase ControlarProducto que se necesite

Otra aclaracion importante es que trabajo con AJAX es decir tengo un index.php que dentro del body hay un div llamado <div id='carga'></div> que es donde cargo por ejemplo mi producto.php que es quien maneja las operaciones de los productos como les mensione antes.

Algo asi es como estoy diviendo mis archivos en el proyecto, solos les pongo los archivos que mensionare, tambien debo aclararles que hay clases para manejo de usuarios que son en realidad dichas clases las que trabajan con los producos pero para simplificar no las pongo en este mini ejemplo.

Proyeco
index.php
-->Clases
------>class.Producto.php
------>class.Proveedor.php
-->Views
------>formAltaProducto.php
------>resultadoDeBusqueraProducto.php
------->formBuscarProducto.php
------->productos.php
-->Controllers
-------->class.controladorProducto.php
-->Model
-------->class.ModelProveedor.php
-------->class.ModelProducto.php


class.ControladorProducto.php
Código PHP:
<?php
class ControladorProducto{
    function  
__construct() {
    }

    function 
getVistaAlta(){
       include(
"../Views/formAltaProducto.php");
    }

[
B]function getVistaBuscarOMostrarProductos(){ Duda si esta bien asiabajo explico. [/B
        include(
"../Views/formBuscarProdutos.php"); // inserta el formulario de busqueda un campo y un combo que selecciona la categoria.
        
[B]$usr recupera el usuario por asi decirlo.[/B]
         if(
$_GET['Accion']=='Buscar'){
               
$valor $_POST['textBuscar'];
               
$campo $_POST['comboBuscar'];
               
$resultado $usr->buscarProductos($valor$campo);
               include(
"../Views/tablaResultadoBuscarProductosCliente.php"); // trabaja y muestra lo que contien $resultado.
            
}else{
               
$resultado $usr->mostrarProductos();
               include(
"../Views/tablaResultadoBuscarProductosCliente.php"); // trabaja y muestra lo que contien $resultado.
            
}
         }
}
?>
DUDA: Les explico mi duda, depende el tipo de usuario se muestran mas o menos campos en la tabla, igual mi duda es la siguiente, esto trabaja de la siguiente manera en el archivo producto.php, y medianta la instancia del controladorProducto se llama al metodo
$controladorProducto->getVistaMostrarOBuscarProductos(), ese metodo como se ven en el codigo median la instancia de la clase usuario (Que puede ser cliente o vendedor o administrador) llama al metodo buscar o mostrar producto, la clase cliente por asi decirlo instancia el ModeloProducto y realiza la operacion, una vez teniendo el resultado se llama al resultadoDeBusqueraProducto.php que es quien la muestra en definitiva.
Simplificando las cosas algo asi seria el metodo que llama:
Código PHP:
function mostrarProductos(){ // supongamos que es un cliente
      
$modelProductos = new ModelProducto();
      return 
$modelProductos->listarProductos();

formAltaProducto.php dentro de la carpeta Views
obviamente mis formulario no es asi pero lo dejo simpel como para que se entienda mi problema.
Código PHP:
<form name="formProducto" id="formProducto" action="<?php echo $accion?>" method="post" enctype="multipart/form-data">
<?php
       $modelProveedor 
= new ModelProveedor();
       
$resultado $modelProveedor->listarProveedoresCombo();
?>
 <select name='proveedores' id='proveedores'>
    <?php
        
for ($i 0$i $resultado->cantidad(); $i++) {
           
$proveedor $resultado->retornar($i);
     
?>
  <option value=" <?php echo $proveedor->getIdProveedor(); ?> >
        <?php echo $proveedor->getProveedor();?>
  </option>
   <?php ?>

</select>

<input id="textProducto" type="text" onblur="validarTextProducto();" />
                    
                    
</form>
Bueno ahora les comento cual es mi problema, como les mensione antes cargo casi todo con AJAX entonces tengo un index.php que contiene un menu, en ese menu se selecciona por ejemelo Alta Producto y con ese click se carga mediante AJAX en el div <div id='carga'></div> se carga el archivito producto.php que mediante los GETs mensionados antes sabe que tiene que llamar al metodo de miControlarProducto->getVistaAlta();, ahi es donde se me complica como los require() de las clases estan en el archivo producto.php y este mediante el controlador llama a getVistaAlta() que realiza el include llamando a la vista formAltaProductos.php, el archivo formAltaProducto no encuentra las clases, porque esta en produco.php y no en la vista, y lo mismo me pasa con las funciones de validacion de javascripts ya que esas estan en el index.php.
Como puedo solucionar esto??? esta bien como el orden y lugar donde realizo las llamadas y operaciones??
por lo que lei se que debe ser algo asi, pero tengo mis dudas.

como ultimo comentario les dejo un mini esquema de como son las llamadas.

Se cargan asi:
index.php (Contiene los archivos de validacion JAVASCRIPTS)
LLAMA A:
productos.php
(que contiene los require de las clases necesarias para las operacion con los productos.)
mediante la instancia del controlador, con el include
LLAMA A:
formAltaProducto.php (Que necesita las clases cargadas en productos.php y ahi va el ERROR)

Bueno gente espero que se entienda y desde ya gracias por leer el post, cualquier duda que tenga se las aclaro, les agradezco cualquier respuesta o sugerencia.

Saludos.

NicoStone.





bueno espero haberme explicado bien y que se entienda

Última edición por nicostone; 20/09/2010 a las 13:25