2009-04-05 10 views
8

Sto usando Kohana ma questa domanda si applica a Rails, CI o qualsiasi altro framework di sviluppo web MVC. Dov'è il posto migliore per attaccare gli script AJAX lato server?Kohana - dove metti gli script AJAX?

Sono stato pianificazione sulla creazione di un Ajax_Controller e utilizzo di un metodo/azione per singolo script.

Per esempio, un form di login in home page index.php/home avrebbe inviato un XMLHttpRequest per index.php/ajax/login, e l'edit profilo index.php/profile/edit avrebbe inviato un XMLHttpRequest per index.php/ajax/editprofile. Qual è la migliore pratica?

risposta

1

Non uso Kohana ma quello che faccio nel mio framework è che gli script AJAX sono controller. Cerco di trattarli come controller standalone ma alla fine sono solo controller.

5

Realizzate diversi controller per richieste GET e POST? Io non. A mio avviso, le richieste di JS non dovrebbero essere trattate in modo diverso neanche.

Personalmente vedo richieste JS proprio come GET, POST o qualsiasi altro tipo di richiesta. Quindi, se ho azioni basate su JS relative all'utente, semplicemente le creo nel controller utente.

9

Tendo a mettere le mie azioni Ajax nello stesso controller delle azioni non Ajax per un dato modello.

Quando posso, provo a utilizzare le stesse azioni e cambio solo il tipo di output. La maggior parte delle attività dovrebbe comunque avere una versione non-ajax, quindi questo tende a funzionare abbastanza bene. Molto utile per ridurre la duplicazione logica.

+1

@Mario sembra accettare. Conta come consenso? –

+0

infatti, non cambiare i controller, le azioni sono le stesse. Basta cambiare la vista (lasciare che le viste AJAX restituiscano JSON o qualcosa e le viste "normali" in html) –

+0

In seguito al commento di Pim .. http://docs.kohanaphp.com/helpers/request#is_ajax ti dovrebbe aiutare qui. – Louis

1

L'utilizzo di un controller separato è una buona idea. Organizzo i miei controller per funzione e quindi azioni per tipo di ritorno.

Inoltre, quando utilizzo i piloni posso decorare un'azione con @jsonify e questo si occuperà automaticamente della conversione di oggetti Python in JSON. Molto maneggevole.

2

Se si intendono gli script AJAX (Javascript), questi devono essere inseriti nella cartella public/js. Tuttavia, se intendi le azioni invocate da queste richieste AJAX, dovrebbero essere considerate come qualsiasi altra azione dei rispettivi controllori. Per essere completamente RESTful, dovresti usare un formato diverso (json, xml, ecc.) Come valori di ritorno per quelle azioni.

7

AJAX attraversa tutti i limiti MVC. Cioè, non va in un solo modello, vista o controller.

  • Gli script AJAX chiameranno gli script sul vostro sito - quindi questo comporterebbe una sezione del regolatore strato che hai creato per lo scopo.
  • Tale controller a sua volta accederà al database utilizzando l'interfaccia fornita dal proprio livello modello, proprio come farebbe una richiesta non AJAX.
  • I dati per la risposta al client possono essere impacchettati come JSON o XML o qualcosa del genere.Tecnicamente questo è il compito del tuo livello vista, anche se la definizione dell'applicazione di un livello di visualizzazione non è altro che "un sistema di templatura HTML" piuttosto che "elaborare e formattare qualsiasi cosa che viene rimandata al client, sia che si tratti di HTML o qualcosa del genere altrimenti come XML "allora la tua generazione XML o JSON potrebbe aver bisogno di entrare in una nuova piccola sezione a parte.

Per quanto riguarda l'invio degli script (file JavaScript), questo sarà probabilmente gestito direttamente dal server Web anziché dal framework MVC.

1

mi piace tenere tutte le mie richieste Ajax in un controller, in genere dispacciamento le loro richieste attraverso un modello condiviso (che il controllore non ajax inoltre usa)

La differenza principale è del parere che i risultati tramite il controller ajax (html fragments, json data, ecc.) o il controller non-ajax (pagine complete)

0

È possibile eseguire il wrapping come un REST-api generale e utilizzare le convenzioni e gli URI RESTful. Esempio:

Invece di index.php/ajax/editprofile potrebbe essere una richiesta PUT a index.php/api/profile/profilename.

2

Io sono un noob, ma in base alla mia comprensione, per raggiungere l'Ajax con php mvc ... pensando passi potrebbe essere:

  • cambiare la definizione/funzione dello strato vista php esistente dal 'modello HTML 'in' risultati di formattazione (XML, JSON ecc. '-> i risultati dal modulo rilevante, che poi chiamato dal controller per l'output in oggetto AJAX, quindi significa che è necessario scrivere livelli di vista in ogni classe particolare con metodi di formattazione
  • Lo strato del modulo PHP rimane lo stesso
  • crea una classe di router Ajax con JS che mantiene la stessa struttura che instradi in yo ur PHP
  • creare una classe di gestori di risultati ajax con JS per gestire i risultati restituiti dai controller PHP (XML JSON ecc.), quindi da qui eseguire le interazioni utente desiderate, questo verrà chiamato da sopra la classe router Ajax

Quindi,

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