1- tengo una aplicacion usando MVC tengo mi clase controller que es asi:
Código php:
Ver original
< ?php class FrontController { static function main() { //Incluimos algunas clases: require 'libs/Config.php'; //de configuracion require 'libs/SPDO.php'; //PDO con singleton require 'libs/View.php'; //Mini motor de plantillas require 'config.php'; //Archivo con configuraciones. //Con el objetivo de no repetir nombre de clases, nuestros controladores //terminaran todos en Controller. Por ej, la clase controladora Items, será ItemsController //Formamos el nombre del Controlador o en su defecto, tomamos que es el IndexController $controllerName = $_GET['controlador'] . 'Controller'; else $controllerName = "IndexController"; //Lo mismo sucede con las acciones, si no hay accion, tomamos index como accion $actionName = $_GET['accion']; else $actionName = "index"; $controllerPath = $config->get('controllersFolder') . $controllerName . '.php'; //Incluimos el fichero que contiene nuestra clase controladora solicitada require $controllerPath; else //Si no existe la clase que buscamos y su acción, tiramos un error 404 { return false; } //Si todo esta bien, creamos una instancia del controlador y llamamos a la accion $controller = new $controllerName(); $controller->$actionName(); } } ?>
y mi index es asi:
Código php:
Ver original
< ?php //Incluimos el FrontController require 'libs/FrontController.php'; //Lo iniciamos con su método estático main. FrontController::main(); ?>
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:
o algo asi:Ver original
<form action="index.php" method="post" id="formSearch" onSubmit="GeneralAjax.close(); GeneralAjax.get(this); return false;">
Código html:
Esos ejemplos los vi en una pagina pero no pude acceder al codigo para ver como funciona.Ver original
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
class View { function __construct() { } { //$name es el nombre de nuestra plantilla, por ej, listado.php //$vars es el contenedor de nuestras variables, es un arreglo del tipo llave => valor, opcional. //Traemos una instancia de nuestra clase de configuracion. $config = Config::singleton(); //Armamos la ruta a la plantilla $path = $config->get('viewsFolder') . $name; //Si no existe el fichero en cuestion, tiramos un 404 { return false; } //Si hay variables para asignar, las pasamos una a una. { foreach ($vars as $key => $value) { $$key = $value; } } //Finalmente, incluimos la plantilla. include($path); } } /* El uso es bastante sencillo: $vista = new View(); $vista->show('listado.php', array("nombre" => "Juan")); */ ?>
que despues en el controlador lo uso asi:
Código php:
Ver original
$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
class ItemsController { function __construct() { //Creamos una instancia de nuestro mini motor de plantillas $this->view = new View(); } public function listar() { require 'models/ItemsModel.php'; $items = new ItemsModel(); $listado = $items->listadoTotal(); $data['listado'] = $listado; return $Data; } }
y despues un archivo para la vista algo asi:
itemsVista.php:
Código php:
Ver original
class VItems extends View { public function listar($data) { $this->Smarty->assign('componentTemplate',$this->settings['siteDir'].$this->settings['adminDir'].'components/comp_notes/templates/htmls/reports/show.html'); $this->Smarty->assign('data', $data); } }
Pero nuevamente no se como se podria implementar.
Desde ya muchas gracias por su ayuda