2009-12-28 11 views
5

Ich lerne das PHP MVC Muster für meine Backend-Implementierung. Mit Blick auf diesem hervorragenden Beispiel:POST in PHP MVC Controller?

Implementierung MVC in PHP: Der Controller

http://onlamp.com/pub/a/php/2005/11/03/mvc_controller.html

mich mit dem Ausführungsablauf in einem GET wohl fühlen. Aber es gibt keine Erwähnung dessen, was in einem POST passiert. Was würde der typische Controller-Code für den POST tun? Ich frage mich, ob ich hier etwas Offensichtliches falsch verstehe, da ich ähnliche Situationen in früheren SO-Posts oder Google nicht finden kann.

Zum Beispiel: Eine App, um Personen zu verwalten, (Name, letzte, Alter) will einen Datensatz zu db hinzufügen, wenn ein POST den Controller trifft. Was passiert als nächstes? Meine Vermutung ist, dass die 'Ansicht' überhaupt nicht verwendet wird, oder vielleicht zur Bestätigung? Gibt es nur einen Aufruf vom Controller an eine Modellklasse, die einen Datensatz zu db hinzufügt? Oder überspringe ich den Controller insgesamt für einen POST und gehe direkt zu einem "add record" Skript?

Gibt es ein verfügbares Beispiel?

Vielen Dank im Voraus, Ari

Antwort

4

Nun, POST ist im Grunde das gleiche wie GET, nur einige zufällige Stücke von Info-Client zum Server gesendet. So können Sie es auf die gleiche Weise behandeln.

Ich arbeitete mit CodeIgniter MVC-Framework in PHP. Es verwendet GET URI, um zum Controller und seinen Methoden zu routen. Wenn die POST-Anfrage kommt, behandelt sie ihren URI auf die gleiche Weise. Die späteren Aktionen liegen in der Hand des Programmierers, der direkt oder über einen Wrapper auf POST-Anforderungsdaten zugreift und diese auch gar nicht verwenden kann.

Ich muss sagen, dass Sie sich auf die falschen Teile konzentrieren. MVC ist nicht das Modell von allem und es sagt nicht, wie man POST- oder GET-Anfragen behandelt. Es ist nur ein einfaches Prinzip, das viele Jahre zuvor bekannt wurde, als der Name "MVC" als das Prinzip der Trennung von Logik, Daten und Repräsentation bekannt wurde. Und die meiste Software (von alt bis neu) macht diese Aufteilung tatsächlich, weil es sehr schwer ist, dies in den meisten Fällen zu tun. In manchen Apps sind die Grenzen nicht so offensichtlich, manche haben sogar kein Objektmodell. Die Implementierung der App liegt immer bei Ihnen, da MVC Ihnen nicht sagt, was Sie schreiben sollen, sondern nur einige Hinweise auf die Organisation Ihres Codes auf höchster Ebene gibt.

P.S. Entschuldigung für mein schlechtes Englisch.

+0

Danke Jungs .Ich werde diese als die richtige Antwort markieren, da sie meine Frage beantwortet. Ich möchte nur erwähnen, dass ich zuvor mit MVC in einer Desktop-Umgebung gearbeitet habe, aber der POST-Teil hat mich verwirrt. Ich werde versuchen, es ähnlich einem GET zu behandeln. Mit freundlichen Grüßen Ari – BeMeCollective

3

Typischerweise wird der Controller die Anforderung (der Controller verarbeitet alle Anfragen), dann rufen Sie in das Modell tatsächlich Daten zu manipulieren basierend auf der Anforderung, und dann entweder umleiten irgendwo würde verarbeiten else (Auslösen einer neuen GET-Anforderung) oder rufen Sie eine Ansicht auf, um eine resultierende Seite auszugeben.

3

Nun, wenn Sie Ihre eigene MVC-Musterlösung erstellen, könnten Sie eine knifflige Sache machen. Da Sie mit MVC arbeiten, sollten Sie einen wirklich zuverlässigen Routing-Manager haben. So nach dem URL-Analyse und die Definition, was Controller/Methode Sie sollen auslösen, könnten Sie so etwas wie machen:

<?php 
    ...; 
    $method_name = (count($_POST) > 0) ? "post_".$route_result : $route_result; 
    ...; 

und später in Ihrem Controller-Klasse könnte man so etwas tun:

<?php 
namespace Controllers; 

class MyController extends \System\Controller { 
    function my_method($whatever = null){ 
     ...; 
     return $this->view($model_or_whatever); // supposed that you prepared view Class in routes 
    } 

    function post_my_method($whatever = null){ 
     ...; 
     return $this->view($model_or_whatever); // supposed that you prepared view Class in routes 
    } 

} 
+11

Bitte verzichten Sie hier auf txtspeak. "U", "R" und "Smth" sind keine Wörter. – Charles

+2

Ich werde das nächste Mal nicht wiederholen, mein Englisch ist einfach nicht sehr gut oder ich habe mich nur daran gewöhnt, meine Nachrichten zu verkürzen –