Kohana - wo setzt du AJAX-Skripte?

8

Ich verwende Kohana , aber diese Frage gilt für Rails, CI oder jedes andere MVC-Webentwicklungs-Framework. Wo ist der beste Ort, um die serverseitigen AJAX-Skripte zu kleben?

Ich plante bei der Erstellung eines Ajax_Controllers und der Verwendung einer Methode / Aktion für jedes einzelne Skript.

Ein Anmeldeformular auf der Startseite index.php/home würde beispielsweise ein XMLHttpRequest an index.php/ajax/login und das Profilformular für das Profil index.php/profile/edit senden. sendet ein XMLHttpRequest an index.php/ajax/editprofile . Was ist die beste Praxis?

    
GeekJock 05.04.2009, 14:51
quelle

9 Antworten

1

Ich verwende Kohana nicht, aber was ich in meinem Framework mache ist, dass AJAX-Skripte Controller sind. Ich versuche, sie als eigenständige Controller zu behandeln, aber am Ende sind sie nur Controller.

    
Ólafur Waage 05.04.2009, 15:12
quelle
9

Ich neige dazu, meine Ajax-Aktionen in denselben Controller zu legen wie die Nicht-Ajax-Aktionen für ein bestimmtes Modell.

Wenn ich kann, versuche ich, dieselben Aktionen zu verwenden und nur den Ausgabetyp zu ändern. Die meisten Aufgaben sollten sowieso eine Nicht-Ajax-Version haben, daher funktioniert das ziemlich gut. Sehr praktisch zum Reduzieren der logischen Duplizierung.

    
Tom Wright 05.04.2009 16:16
quelle
7

AJAX überschreitet alle MVC-Grenzen. Das heißt, es geht nicht nur um Modell, Ansicht oder Controller.

  • Ihre AJAX-Skripte rufen Skripte auf Ihrer Site auf - dies würde einen Abschnitt Ihrer -Controller -Schicht betreffen, die Sie für diesen Zweck erstellt haben.
  • Dieser Controller würde wiederum auf die Datenbank zugreifen, indem er die von Ihrer Modell -Schicht bereitgestellte Schnittstelle verwendet, genau wie eine Nicht-AJAX-Anforderung.
  • Die Daten für die Antwort zurück zum Client können als JSON oder XML oder so verpackt sein. Technisch gesehen ist dies die Aufgabe Ihrer view -Schicht, obwohl die Definition einer Ansichtsebene in Ihrer Anwendung nichts anderes als "ein HTML-Templating-System" ist, anstatt "alles, was an den Client zurückgesendet wird, zu verarbeiten und zu formatieren ob es HTML oder etwas anderes wie XML ist ", dann muss Ihre XML- oder JSON-Generation möglicherweise in eine neue kleine eigene Sektion gehen.

Wie beim Senden der Skripte (Javascript-Dateien) selbst, wird dies wahrscheinlich direkt vom Webserver und nicht von Ihrem MVC-Framework aus gehandhabt.

    
thomasrutter 06.04.2009 03:22
quelle
5

Machst du verschiedene Controller für GET- und POST-Anfragen? Ich nicht. Meiner Meinung nach sollten JS-Anfragen auch nicht anders behandelt werden.

Ich persönlich sehe JS-Anfragen wie GET, POST oder jede andere Art von Anfrage. Wenn ich also benutzerbezogene JS-basierte Aktionen habe, erzeuge ich sie einfach im Benutzer-Controller.

    
Mario 05.04.2009 15:51
quelle
2

Wenn Sie die AJAX (Javascript) -Skripte selbst meinen, sollten diese in Ihren public / js-Ordner gehen. Wenn Sie jedoch die Aktionen meinen, die von diesen AJAX-Anfragen aufgerufen werden, sollten sie wie alle anderen Aktionen der jeweiligen Controller behandelt werden. Um vollständig REST-konform zu sein, sollten Sie ein anderes Format (json, xml usw.) als Rückgabewerte für diese Aktionen verwenden.

    
Pras 05.04.2009 17:45
quelle
2

Ich bin ein Noob, aber basierend auf meinem Verständnis, Ajax mit PHP mvc zu erreichen ... Denkschritte könnten sein:

  • Ändere die Definition / Funktion der bestehenden php view layer von 'HTML template' in 'results formating (XML, JSON etc ..' - & gt; Ergebnisse aus dem relevanten Modul, die dann vom Controller zur Ausgabe in ein AJAX-Objekt aufgerufen werden, dann bedeutet es, dass Sie View-Layer mit Formatierungsmethoden
  • in jede einzelne Klasse schreiben müssen
  • PHP-Modul-Ebene bleibt gleich
  • Erstellen Sie eine Ajax-Router-Klasse mit JS, die dieselbe Struktur behält, die Sie in Ihrem PHP
  • routen
  • Erstellen Sie eine Ajax-Ergebnis-Handler-Klasse mit JS, um die Ergebnisse von PHP-Controllern (XML JSON etc ..) zurück zu bekommen, dann von hier aus alle Benutzerinteraktionen durchführen, die von oben genannten Ajax-Router-Klasse

Also,

%Vor%     
timm 04.02.2012 16:53
quelle
1

Die Verwendung eines separaten Controllers ist eine gute Idee. Ich organisiere meine Controller entweder nach Funktion und dann nach Rückgabetyp.

Außerdem kann ich bei der Verwendung von Pylons eine Aktion mit @jsonify dekorieren, die automatisch die Konvertierung von Python-Objekten in JSON übernimmt. Sehr praktisch.

    
dave paola 05.04.2009 16:18
quelle
1

Ich möchte alle meine Ajax-Anfragen in einem Controller behalten und ihre Anfragen typischerweise über ein gemeinsam genutztes Modell (das auch der Nicht-Ajax-Controller verwendet) versenden

Der Hauptunterschied ist die Ansicht, die über den Ajax-Controller (HTML-Fragmente, JSON-Daten usw.) oder den Nicht-Ajax-Controller (ganze Seiten) zustande kommt

    
Darryl E. Clarke 09.04.2009 19:08
quelle
0

Sie könnten es als allgemeine REST-API einpacken und RESTful-Konventionen und URIs verwenden. Beispiel:

Anstelle von index.php / ajax / editprofile könnte es eine PUT-Anfrage an index.php / api / profile / Profilname sein.

    
finpingvin 20.12.2009 10:39
quelle