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

combo de dudas POO y MVC

Estas en el tema de combo de dudas POO y MVC en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo unas cuantas dudas que quisera ver si me pueden aclararlas jeje. 1- tengo una aplicacion usando MVC tengo mi clase controller que es ...
  #1 (permalink)  
Antiguo 17/11/2009, 21:08
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
combo de dudas POO y MVC

Hola, tengo unas cuantas dudas que quisera ver si me pueden aclararlas jeje.

1- tengo una aplicacion usando MVC tengo mi clase controller que es asi:
Código php:
Ver original
  1. < ?php
  2. class FrontController
  3. {
  4.     static function main()
  5.     {
  6.         //Incluimos algunas clases:
  7.  
  8.         require 'libs/Config.php'; //de configuracion
  9.         require 'libs/SPDO.php'; //PDO con singleton
  10.         require 'libs/View.php'; //Mini motor de plantillas
  11.  
  12.         require 'config.php'; //Archivo con configuraciones.
  13.  
  14.         //Con el objetivo de no repetir nombre de clases, nuestros controladores
  15.         //terminaran todos en Controller. Por ej, la clase controladora Items, será ItemsController
  16.  
  17.         //Formamos el nombre del Controlador o en su defecto, tomamos que es el IndexController
  18.         if(! empty($_GET['controlador']))
  19.               $controllerName = $_GET['controlador'] . 'Controller';
  20.         else
  21.               $controllerName = "IndexController";
  22.  
  23.         //Lo mismo sucede con las acciones, si no hay accion, tomamos index como accion
  24.         if(! empty($_GET['accion']))
  25.               $actionName = $_GET['accion'];
  26.         else
  27.               $actionName = "index";
  28.  
  29.         $controllerPath = $config->get('controllersFolder') . $controllerName . '.php';
  30.  
  31.         //Incluimos el fichero que contiene nuestra clase controladora solicitada
  32.         if(is_file($controllerPath))
  33.               require $controllerPath;
  34.         else
  35.               die('El controlador no existe - 404 not found');
  36.  
  37.         //Si no existe la clase que buscamos y su acción, tiramos un error 404
  38.         if (is_callable(array($controllerName, $actionName)) == false)
  39.         {
  40.             trigger_error ($controllerName . '->' . $actionName . '` no existe', E_USER_NOTICE);
  41.             return false;
  42.         }
  43.         //Si todo esta bien, creamos una instancia del controlador y llamamos a la accion
  44.         $controller = new $controllerName();
  45.         $controller->$actionName();
  46.     }
  47. }
  48. ?>

y mi index es asi:
Código php:
Ver original
  1. < ?php
  2. //Incluimos el FrontController
  3. require 'libs/FrontController.php';
  4. //Lo iniciamos con su método estático main.
  5. FrontController::main();
  6. ?>

El tema es que ahora me pidieron que la misma aplicacion permita usar ajax de forma nativa, he visto muchas de las librerias para ajax en php (sajax, xajax, etc) pero en los mismos hay que armar las llamadas dentro del html (por lo que vi en los ejemplos) y por cada funcion php a llamar hay que crear su respectivo en xajax por ejemplo.
Mi duda es si existe o conocen algun tutorial o sistema que permita el uso de ajax sin la necesidad de escribir todo 2 veces, yo estaba pensando si es posible algo asi:
Código html:
Ver original
  1. <form  action="index.php" method="post" id="formSearch"
  2.               onSubmit="GeneralAjax.close(); GeneralAjax.get(this); return false;">
o algo asi:
Código html:
Ver original
  1. <a href="javascript:GeneralAjax.close(); GeneralAjax.makeGetRequest('index.php?component=notes&controller=CReports&action=getList&fromSession=1&orderField=reporter&displayBy=ajax&orderType={$data.orderLinks.order}');">{$smarty.const.COMP_REPORTS_REPORTER}</a>
Esos ejemplos los vi en una pagina pero no pude acceder al codigo para ver como funciona.
Pero la idea sería esa que se le pase la url y el ajax sepa que controlador y que accion se quiere ejcutar.
No se si esto se puede hacer en el frontcontroller o donde se puede hacer

2- He estado investigando por ahi, y vi en mucho tutoriales sobre MVC que hablan del patron regestry, para que funciona?, lo que encontre no me quedo de todo claro.?

3- volviendo a mi MVC actualmente tengo mi clase para las vistas que es asi:
Código php:
Ver original
  1. class View
  2. {
  3.     function __construct()
  4.     {
  5.     }
  6.  
  7.     public function show($name, $vars = array())
  8.     {
  9.         //$name es el nombre de nuestra plantilla, por ej, listado.php
  10.         //$vars es el contenedor de nuestras variables, es un arreglo del tipo llave => valor, opcional.
  11.  
  12.         //Traemos una instancia de nuestra clase de configuracion.
  13.         $config = Config::singleton();
  14.  
  15.         //Armamos la ruta a la plantilla
  16.         $path = $config->get('viewsFolder') . $name;
  17.  
  18.         //Si no existe el fichero en cuestion, tiramos un 404
  19.         if (file_exists($path) == false)
  20.         {
  21.             trigger_error ('Template `' . $path . '` does not exist.', E_USER_NOTICE);
  22.             return false;
  23.         }
  24.  
  25.         //Si hay variables para asignar, las pasamos una a una.
  26.         if(is_array($vars))
  27.         {
  28.                     foreach ($vars as $key => $value)
  29.                     {
  30.                     $$key = $value;
  31.                     }
  32.                 }
  33.  
  34.         //Finalmente, incluimos la plantilla.
  35.         include($path);
  36.     }
  37. }
  38. /*
  39.  El uso es bastante sencillo:
  40.  $vista = new View();
  41.  $vista->show('listado.php', array("nombre" => "Juan"));
  42. */
  43. ?>

que despues en el controlador lo uso asi:
Código php:
Ver original
  1. $this->view->show("listar.php", $data);

mi idea es evitar ese paso y tener por ejemplo otra clase que tenga las asignaciones a las vistas algo asi:
itemsControlador.php:
Código php:
Ver original
  1. class ItemsController
  2. {
  3.     function __construct()
  4.     {
  5.         //Creamos una instancia de nuestro mini motor de plantillas
  6.         $this->view = new View();
  7.     }
  8.  
  9.     public function listar()
  10.     {
  11.        
  12.         require 'models/ItemsModel.php';
  13.  
  14.        
  15.         $items = new ItemsModel();
  16.  
  17.        
  18.         $listado = $items->listadoTotal();
  19.  
  20.        
  21.         $data['listado'] = $listado;
  22.  
  23.         return $Data;
  24.     }
  25.  
  26. }

y despues un archivo para la vista algo asi:
itemsVista.php:
Código php:
Ver original
  1. class VItems extends View {
  2.        
  3.     public function listar($data) {    
  4.         $this->Smarty->assign('componentTemplate',$this->settings['siteDir'].$this->settings['adminDir'].'components/comp_notes/templates/htmls/reports/show.html');
  5.         $this->Smarty->assign('data', $data);
  6.     }
  7.    
  8. }

Pero nuevamente no se como se podria implementar.

Desde ya muchas gracias por su ayuda
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 00:24.