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< ?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
if(! empty($_GET['controlador'])) $controllerName = $_GET['controlador'] . 'Controller';
else
$controllerName = "IndexController";
//Lo mismo sucede con las acciones, si no hay accion, tomamos index como accion
if(! empty($_GET['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
die('El controlador no existe - 404 not found');
//Si no existe la clase que buscamos y su acción, tiramos un error 404
{
trigger_error ($controllerName . '->' . $actionName . '` no existe', E_USER_NOTICE); 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:
Ver original<form action="index.php" method="post" id="formSearch" onSubmit="GeneralAjax.close(); GeneralAjax.get(this); return false;">
o algo asi:
Código html:
Ver original<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 originalclass View
{
function __construct()
{
}
public function show
($name, $vars = array()) {
//$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
{
trigger_error ('Template `' . $path . '` does not exist.', E_USER_NOTICE); 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 originalclass 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 originalclass 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