2010-05-28 7 views
5

Pensé en tener una capa de servicio de módulo AJAX, con controladores y acciones que interactúan con mi modelo. Fácil, pero no muy extensible y violaría DRY. Si cambio la logística de algún proceso, tendré que editar los controladores AJAX y los controladores normales.La mejor manera de estructurar AJAX para una aplicación de Zend Framework

Así que, idealmente, cargaría las mismas acciones para los usuarios de javascript y los que no lo son. He pensado en comprobar si hay $_POST['ajax']; si está configurada, cargaría una vista diferente (json'y) para los datos. Me preguntaba cómo/una buena forma de hacerlo (¿me imagino que usaré un plugin de controlador frontal?) O si alguien me puede indicar un tutorial UP TO DATE que describe una forma realmente buena de construir una aplicación ajax más grande.

Respuesta

5

En realidad se puede utilizar el objeto de solicitud para determinar si una solicitud ha pasado por ajax, por ejemplo:

// from your controller 
if($this->getRequest()->isXmlHttpRequest()) { 
    // an ajax request, do something special (e.g. render partial view) 
} else { 
    // render entire view 
} 

Eso es básicamente probando para la cabecera x-requested-with (que no es siempre presente, en función de biblioteca de JS , etc.) Ver (bajo el título de 'detección de peticiones Ajax'):

http://framework.zend.com/manual/en/zend.controller.request.html

+0

'' getRequest' debería ser getRequest() ' – chelmertz

+0

@chelmertz - Gracias por eso. – karim79

+0

@ karim79 ¿Crees que un módulo solo para recibir solicitudes de ajax es una buena práctica? – JCM

1

Puede verificar los encabezados XmlHttpRequest. Sin embargo, no todas las bibliotecas de Javascript hacen esto, e incluso las que sí lo hacen no necesariamente lo hacen en todos los navegadores.

También hay AjaxContext, que básicamente verifica la variable de solicitud de "contexto" similar a su idea de $ _POST ['ajax'].

Lo que terminé haciendo fue similar a su sugerencia original. Creé un módulo AJAX. Con el fin de evitar toneladas de duplicación de código de controlador, creé una capa de servicio que maneja todas las operaciones en los modelos, por lo que mis controladores son en realidad los únicos responsables de transformar las solicitudes de entrada y la visualización.

Cuestiones relacionadas