dedlfix: Zusammenspiel MVC/Ajax

Beitrag lesen

Tach!

Das ist Aufgabe des Routers.
Kontrolle über Benutzereingaben Aufgabe des Routers? Mag sein dass das Bei Dir so ist.

Ein Request hat zunächst einmal eine Ziel-Angabe. Die ist in der Regel nicht vom Benutzer eingegeben, sondern indirekt gewählt, zum Beispiel im href-Attribut beim Klicken eines Links oder beim Absenden eines Formulars im Action-Attribut. Dazu kommen noch gegebenenfalls Nutzereingaben. Diese beiden Sorten von Daten kommen nun in einem einzigen Request beim Server an. Es ist Aufgabe des Routers, sich die passenden Teildaten aus dem Request zu holen und damit den Weg zur Controller-Action zu finden. Die Action holt sich aus dem Request die für sie interessanten Daten und erledigt damit die für sie vorgesehene Aufgabe. Nach diesem Prinzip arbeiten alle mir bekannten Frameworks, die unter anderem einen MVC-Teil enthalten.

Beispiele:

/customer - customer wird vom Router ausgewertet und daraufhin der Customer-Controller ausgewählt. Jetzt fehlt die aufzurufende Action. Die kommt aus einem Default-Wert in der Router-Konfiguration. Nehmen wir mal index an. Aufgerufen wird damit die Index-Action des Customer-Controllers. Die bekommt keinerlei Daten übergeben und gibt z.B eine Liste der Kunden zurück.

/customer?page=23 - Wie oben, nur dass page nicht vom Router ausgewertet wird sondern von der Index-Action, die daraufhin nur einen Teil der Daten zurückgibt.

/customer/42 - Vom Router wird erkannt, dass hier ein zweiter Teil mit einer Zahl vorliegt. Der konkrete Wert wird aber nicht weiter berücksichtigt. Der Router ruft deswegen die Details-Action auf. Die bekommt die 42 übergeben und liefert das Ergebnis für einen einzelnen Datensatz.

/customer/create - Als GET aufgerufen ruft der Router die Create-Action für GET-Requests des Customer-Controllers auf. Die liefert ein leeres Formular.
/customer/create - Als POST aufgerufen ruft der Router die Create-Action für POST-Requests des Customer-Controllers auf. Die wertet die POST-Daten aus und erzeugt einen Kunden in der Datenbank.

Um seine Aufgabe zu erfüllen, greift der Router gegebenenfalls auch auf POST-Daten zu. Üblicherweise reichen jedoch die Angaben aus der aufgerufenen URL zum Finden der passenden Controller-Action. Es ist jedenfalls nicht üblich, strikt zwischen vom Router und von der Action ausgewerteten Daten zu unterscheiden und diese in getrennte Teile der URL zu packen (à la Router-Daten in den Path, Action-Daten in den Querystring). Damit würde man die beliebten "SEO-friendly" URLs nicht hinbekommen.

Es ist jedoch üblich, dass man den Actions gleich fertig vorgekaute Daten liefert. Die Frameworks extrahieren meist aus dem Request die Daten, befüllen damit gleich ein (in diesem Fall) Customer-Objekt und übergeben dies der Action. Die muss sich dann nicht die Finger schmutzig machen und direkt in den GET/POST/Path-Daten rumwühlen.

Beachte bitte auch, dass "Controller" sich hier nur auf den Action-Controller aus dem MVC-Muster bezieht. Es gibt abseits davon auch noch andere Controller, wie zum Beispiel den Front-Controller, der als allererstes mit dem Request in Berührung kommt, Initialisierungen einleitet und dann die Arbeit zum Router weiterreicht.

In meinen Webanwendungen sind Benutzereingaben Parameter im HTTP-Request. Mein Router routet 'nur' zum path (like /index.html) und interessiert sich nicht im entferntesten für Parameter, gleich ob GET oder POST. Für Parameter in meinen Webanwendungen ist der Controller zuständig.
War schon immer so ;)

Kann sein, findet man aber nicht in freier Wildbahn sondern nur bei dir. Insofern kann ich nicht beurteilen, ob das anders arbeitet als die bekannten Frameworks oder ich nur mit deinen zum Teil selbst erfundenen Begrifflichkeiten nicht klarkomme.

dedlfix.