![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 23.06.2007
Beiträge: 13
|
Hey! Ich habe folgendes Problem: Mein Controller hat verschiedene Methoden z.B. validate und insert. Jede Methode hat gemeinsam, dass via $view->assign ("key", "value"); daten an den view übergeben werden und am Ende $view->render (...); aufgerufen wird. Das funktioniert super wenn ich ohne AJAX arbeite. Wenn ich aber AJAX verwende will ich nur, dass die Daten zurückgegeben werden z.B. bei valid Fehlermeldungen und bei insert eine Erfolgsmeldung und nicht, dass mir hier der View die komplette Seite gerendert zurückgibt und ich mir mit JavaScript die Infos selbst rausparsen kann In Code würde ein Controller so aussehen: PHP-Code: Somit könnte ich mir nen XML-RPC oder JSON-RPC Server schreiben, an dem meine AJAX Requests gehen und der dann eben wirklich nur die für den AJAX Request relevanten Daten zurückgibt. Was haltet ihr davon bzw. wie habt ihr das Problem gelöst und was kann man an der Idee verbessern? -- Peter |
| | |
| | Nach oben #2 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
|
Hi Peter. Was heißt denn für dich "Logik"? Sieht so aus, als hättest du deine Controller mit Funktionen überfrachtet, die eigentlich in der Model-Schicht sinnvoller aufgehoben wären. Das Validieren und Einfügen von Daten gehört doch in die Datenschicht. Der Controller gibt die Daten nur aus dem Request weiter, schaut, was passiert und reagiert entsprechend (z.B. mit einer erneuten Anzeige mit Fehlermeldung oder einem Redirect bei Erfolg). Auch ist es nach meiner Erfahrung wenig sinnvoll, das Rendern der View im Controller zu veranlassen. Konkret zu deinem Problem denke ich, dass du nur entweder zwei Controller bauen musst, oder deine Architektur so umbauen musst, dass dein System auch bei einer "normalen" Anfrage wie ein Ajax-System funktioniert, dass du also den Status der View speicherst und in den Controllern eben auch nur die Veränderungen durchgibst (siehe z.B. PRADO oder auch der aktuelle Thread hier im Forum zu diesem Thema). Ein anderer Weg, der mir gerade kommt ist, den Views so zu erweitern, dass sie in der Lage sind, die Daten direkt aus dem Request zu beziehen bzw. quasi als halbe Umsetzung der Speicherung der ViewStates könntest du Widgets in die Views setzen und noch vor dem Ansprechen der Controller erstmal alle Request-Daten quasi zurück durch die Widgets jagen, damit du diese eben gar nich nochmal neu füttern musst: PHP-Code: Irgendwie so vielleicht? Basti |
| | |
| | Nach oben #3 |
| Neuer Benutzer Registriert seit: 23.06.2007
Beiträge: 13
|
danke für die antwort! Ja so in der Art werde ich es auch machen d.h. den View über eine factory methode zu erzeugen, die dann aufgrund der HTTP Header entscheidet ob es ein XMLHttpRequest ist oder nicht und dann halt eine entsprechende unterklasse von View zurückgibt. mfg peter |
| | |
| | Nach oben #4 | |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
| Zitat:
Basti | |
| | |
| | Nach oben #5 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Ich würd eher pro "Sektion" einen FrontController haben. Ist beim Zend Framework ja ähnlich gelöst. Also, dass z.B. für .xy/blog/ BlogController, für .xy/search/ SearchController, ... verwendet wird. Entschlackt das Ganze etwas und macht es in meinen Augen sehr, sehr übersichtlich und klar abtrennbar. |
| | |
| | Nach oben #6 | |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
| Zitat:
Basti | |
| | |
| | Nach oben #8 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 150
| <klugscheiß>Da muss ich wiedersprechen. Ein FrontController ist in seinem gleichnamigen Pattern klar definiert. Er übernimmt das Handeln von Requests und baut das Model der Applikation auf. Um einen View zu erzeugen verwendet man üblicherweise einen Controller im PageController-Stil.</klugscheiß>
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | Nach oben #9 | ||
| Neuer Benutzer Registriert seit: 23.06.2007
Beiträge: 13
| Zitat:
Also meine getView() Methode sieht derzeit so aus: PHP-Code: PHP-Code: PHP-Code: PHP-Code: MfG Peter | ||
| | |
| | Nach oben #10 | ||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
| Zitat:
Eine Frage habe ich aber: Was beinhaltet Controller::response? Und, was den FrontController angeht, so ist das eben die eine Schnittstelle zwischen Server und Anwendung. Ich denke aber schon, dass es Sinn machen kann, hier je unterschiedlicher Verwendungsmethode (HTML, Ajax, CommandLine) je einen eigenen FrontController anzubieten. Mehr FrontController (also je "Sektion") kann ich nicht nachvollziehen. Wundert mich, dass das ZFW diesen Weg geht. Hast du, Ben, da ein konkretes Beispiel? Basti | ||
| | |
| | Nach oben #11 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Zum Zend-Framework: Die FrontController sind ebend nicht klar definiert, da muss ich Ben uneingeschränkt recht geben (Zumindest nach meinem aktuellen Kenntnisstand). Auch die ganzen Tutorials und Artikel von IBM geben darüber keine Auskunft. Mag sein, dass ich was übersehen habe, aber das sei einmal dahingestellt. Andere Tutorials sollte man nicht als Referenz nehmen, denn die machen es ja, wie sie es selber interpretieren. Fakt ist, dass das Zend Framework eine klare MVC-Trennung vorschreibt. Insofern sind die [Front]Controller also das, was sie vom Namen her sein sollten. Im Prinzip stellt sich nur die Frage, wie man das kapselt, also kapselt man es - pro Webseite (also ein Controller für alles) - pro Funktionalität (ein Controller pro Modul o.ä.) - pro Ausgabeziel (ein Controller für HTML, eines für JSon/Ajax-Kombi) Jeder mag es wohl so machen, wie er will. Fakt ist lediglich, dass man mit Ajax in leichte Schwierigkeiten kommt, das Design einzuhalten. Generiert man im gleichen Controller und bei gleicher Methode mal ein HTML anhand der Views, mal ein Ajax (ohne Views), hält man sich nicht mehr an die Definitionen des Zend Frameworks. Daher fällt das Beispiel "ein Controller, ein Action für alles" wohl weg. Der aktuelle Thread, der oben angesprochen wurde ist übrigens [Design] CMS-System: Seitenstruktur Ich mache genau sowas aktuell oder zumindest etwas, was vor einem analogen Problem stand. Ich habe einmal das initiale Betreten der Seite, bei der die Webseite aufgebaut werden soll und dann habe ich Ereignisse, die per WebRequest ausgelöst werden und sozusagen nur noch Deltas in Form von Anweisungen zurückschicken sollen, beispielsweise "Ändere Farbe auf XYZ in Komponente ABC".
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #12 | |
| Neuer Benutzer Registriert seit: 23.06.2007
Beiträge: 13
| Zitat:
MfG Peter | |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Logisches Problem beim einsatz von Ereignissen | Prophet | Allgemeine Java-Programmierung | 19 | 05.06.2006 22:08 |
| [PHP] FTP-Funktionen in PHP nutzen | MrNiceGuy | Tutorials | 0 | 24.05.2006 14:18 |
| Unterscheidung zwischen Groß-und Kleinschreibung beim Login | cyberboy | Datenbanken | 6 | 22.12.2005 12:05 |