Ich werde ein Projekt mit einer Zend Framework MVC-Implementierung starten.
Wie arbeite ich mit Ajax? Ich meine, sollte ich den ganzen Ajax Code in den Controller legen? Oder in Sicht?
Zum Beispiel möchte ich, dass Beiträge vom Autor 'ivan' auf einer Seite angezeigt werden.
Normalerweise erstelle ich einen Link zu '/ posts / author / ivan' oder smth, erstelle eine neue Aktion wie 'byAuthorAction ()' im Posts Controller (oder vielleicht Users Controller, wo auch immer), schaue dafür ( und alles Code, was Posts von Model bekommt, geht dahin und erstellt eine neue Route dazu.
Wie füge ich Funktionen hinzu, um die Beiträge eines Benutzers in JSON zu erhalten, XML-Formate für AJAX und vielleicht API, halte das DRY-Prinzip und gestalte die Code-Struktur so schlau wie möglich?
-
Danke für die Antworten! Ich werde sehr froh sein, Kommentare über die Gestaltung von MVC in Situationen wie meiner zu sehen. Ich habe etwas Erfahrung in grundlegenden MVC-Prinzipien, aber nicht in komplizierteren Fällen. Vielleicht ein paar nützliche Links?
Sie sollten wirklich das manuelle Kapitel über ContextSwitch Action Helper lesen. Aber hier ist eine kurze Übersicht:
Um zwischen diesen beiden Kontexten zu wechseln, müssen Sie Ihrer URL einen Formatparameter hinzufügen, z. / posts / author / ivan / format / json oder / posts / autor / ivan / format / xml. Wenn Sie das Format nicht angeben, gibt Ihre Anwendung plain html aus.
Eine spezielle Version des Context-Switches ist AjaxContext und Sie müssen diese auch manuell konfigurieren. Es verwendet nicht den Parameter 'format', um zu bestimmen, welches Format es für die Ausgabe verwenden soll, aber es prüft den in Ihrer Anfrage gesendeten Header und sucht nach dem Header 'X-Requested-With: XmlHttpRequest'. Wenn es vorhanden ist, wird der AjaxContext untersucht. Mit dem Aktionshelfer AjaxContext können Sie angeben, welcher Kontext für bestimmte Aktionen verwendet werden soll, wenn die Anfrage mit AJAX ausgelöst wird.
Sehen Sie sich den AjaxContext Action-Helper (oder den ContextSwitch, den er erweitert) an, und Sie können genau denselben Controller-Code verwenden, indem Sie entweder zu einem separaten View-Skript (foo.json.phtml) wechseln oder foo.ajax.phtml usw. - wird automatisch von einem? format-Parameter abgerufen oder verwendet den JSON Action-Helper, der ein Objekt zurückgibt, das alle Variablen enthält, die Sie der Ansicht zuweisen - also nicht benötigen Echo von Ihrem Controller (was Unit-Tests vermasselt, sollten Sie sie haben).
Wenn ich Ajax mit Codeigniter verwende, gebe ich direkt aus dem Controller aus.
Ich benutze auch separate Controller für einfache Ajax-Anfragen wie Markierungen, Favoriten usw. Für Ajax-Anfragen wie Login, Kontakt usw. würde ich Logik zum normalen Pfad (zB domain.com/contact) hinzufügen, um mit einem Ajax umzugehen anfordern. Ich gebe dann json aus und kille die Skriptausführung.
Tags und Links php model-view-controller ajax zend-framework