2009-04-05 10 views
8

Estoy usando Kohana pero esta pregunta se aplica a Rails, CI o cualquier otro marco de desarrollo web de MVC. ¿Dónde está el mejor lugar para pegar los scripts de AJAX del lado del servidor?Kohana - ¿dónde pones los guiones AJAX?

Estaba planeando en la creación de un Ajax_Controller y usando un método/acción por script individual.

Por ejemplo, un formulario de acceso en la página principal index.php/home enviaría un XMLHttpRequest para index.php/ajax/login, y el formulario de edición perfil index.php/profile/edit enviaría un XMLHttpRequest para index.php/ajax/editprofile. ¿Cuál es la mejor práctica?

Respuesta

1

No uso Kohana pero lo que hago en mi marco es que los scripts AJAX son controladores. Intento tratarlos como controladores independientes, pero al final solo son controladores.

5

¿Se hacen diferentes controladores para las solicitudes GET y POST? Yo no. En mi opinión, las solicitudes de JS tampoco deberían tratarse de manera diferente.

Personalmente, veo solicitudes de JS como GET, POST o cualquier otro tipo de solicitud. Entonces, si tengo acciones basadas en JS relacionadas con el usuario, simplemente las creo en el controlador de usuario.

9

Tiendo a poner mis acciones de ajax en el mismo controlador que las acciones sin ajax para cualquier modelo dado.

Cuando puedo, trato de usar las mismas acciones y solo cambio el tipo de salida. La mayoría de las tareas deberían tener una versión que no sea ajax de todos modos, así que esto tiende a funcionar bastante bien. Muy útil para reducir la duplicación lógica.

+1

@Mario parece estar de acuerdo. ¿Eso cuenta como consenso? –

+0

de hecho, no cambie los controladores, las acciones son las mismas. Simplemente cambie sus vistas (deje que las vistas AJAX devuelvan JSON o algo así como las vistas "normales" html) –

+0

Más sobre el comentario de Pim ... http://docs.kohanaphp.com/helpers/request#is_ajax debería ayudarlo aquí. – Louis

1

Usar una controladora por separado es una buena idea. Yo organizo mis controladores por función y luego las acciones por tipo de retorno.

Además, cuando estoy usando Pylons puedo decorar una acción con @jsonify y eso automáticamente se ocupará de convertir los objetos de Python a JSON. Muy útil.

2

Si se refiere a las secuencias de comandos AJAX (Javascript), estas deberían ir a su carpeta public/js. Sin embargo, si se refiere a las acciones invocadas por estas solicitudes AJAX, deben tratarse como cualquier otra acción de los respectivos controladores. Para ser completamente RESTful, debe usar un formato diferente (json, xml, etc.) como valores de retorno para esas acciones.

7

AJAX cruza todos los límites de MVC. Es decir, no entra en solo uno de modelo, vista o controlador.

  • Sus guiones AJAX estarán llamando scripts en su sitio - por lo que esto implicaría una sección de su controlador capa que usted ha creado para este fin.
  • Ese controlador, a su vez, accedería a la base de datos utilizando la interfaz proporcionada por su capa modelo, al igual que una solicitud que no sea AJAX.
  • Los datos de la respuesta al cliente pueden estar empaquetados como JSON o XML o algo así.Técnicamente esta es la tarea de su capa , aunque la definición de capa de vista de su aplicación no es más que "un sistema de plantillas HTML" en lugar de "procesar y formatear cualquier cosa que se devuelva al cliente ya sea HTML o algo más bien como XML ", entonces su generación XML o JSON puede necesitar entrar en una nueva sección propia.

En cuanto a enviar los scripts (archivos Javascript) ellos mismos, esto probablemente será manejado directamente por el servidor web en lugar de dentro de su MVC framework.

1

me gusta mantener todas mis peticiones Ajax en un controlador, por lo general el envío de sus peticiones a través de un modelo compartido (que el controlador no ajax utiliza también)

La principal diferencia es la opinión de que resulta a través del controlador ajax (fragmentos html, datos json, etc.) o el controlador que no es Ajax (páginas completas)

0

Puede resumirlo como REST-api general, y usar convenciones RESTful y URI. Ejemplo:

En lugar de index.php/ajax/editprofile podría ser una solicitud PUT para index.php/api/profile/profilename.

2

yo soy un novato, pero basado en mi entendimiento, para lograr Ajax con PHP MVC ... pensando pasos podrían ser:

  • cambio de la definición/función de la capa de vista php existente de 'plantilla HTML formateo de resultados 'en' (XML, JSON, etc.) resultados del módulo relevante, que luego el controlador llama para enviar a un objeto AJAX, entonces significa que necesita escribir capas de vista en cada clase particular con los métodos de formateo
  • La capa del módulo PHP se mantiene igual
  • construye una clase de enrutador Ajax con JS que mantiene la misma estructura que enrutas en yo ur PHP
  • construye una clase de manejador de resultados ajax con JS para manejar los resultados obtenidos de los controladores de PHP (XML JSON, etc.), luego haz aquí las interacciones del usuario que quieras, esto se llamará por la clase de enrutador Ajax anterior

Así,

ajax router (send XMLhttprequest) 
-> PHP controllers C 
-> PHP module -> PHP view results M 
-> PHP controllers output results V 
-> ajax results handle (into page)