Einfache MVC (PHP) -Struktur

8

Ich habe den folgenden Datenfluss für ein einfaches Login-Formular.

Benutzerzugriffs-Controller PHP-Datei. Der Controller enthält model.php und view.php

Der Benutzer sendet ein Formular, der Controller sendet POST-Daten an Modellmethoden und erhält ein Ergebnis zurück.

Der Benutzer ist angemeldet und wird vom Controller an eine andere Ansicht (Login-Erfolgsmeldung) weitergeleitet.

Momentan sind meine Ansichten statisches HTML (kein PHP), also hier ist meine Frage. Was ist der richtige Weg, um dem Benutzer eine Willkommensnachricht zu geben, z. B. "Hallo, Craig!"?

Ist die Ansicht erlaubt, PHP-Schnipsel, z. B.

%Vor%

seit das Modell in der Controller-Datei geladen ist?

Danke!

Bearbeiten: Ist es besser, der Ansicht den Zugriff auf bestimmte Klassenmethoden zu erlauben, z. B.

? %Vor%

im Gegensatz zu nur Variablen?

Basierend auf anderen Antworten habe ich einen sehr nützlichen Artikel gefunden, an dem Sie möglicherweise auch interessiert sind.

Ссылка

    
Craig Wilson 27.07.2012, 13:49
quelle

2 Antworten

9

Sie können wirklich alles in eine Ansicht einfügen, die Sie möchten, aber um die MVC-Vorgehensweise besser zu befolgen, sollten Sie PHP in der Ansicht auf einfache echo s oder print s beschränken (möglicherweise sehr klein) Schleifen, obwohl auch diese im Controller / Modell vorberechnet werden können). Da dies der einzige Weg ist, um dynamischen Inhalt zu bekommen, wäre es ein wenig albern zu sagen, dass sie nicht erlaubt sind.

Die Idee der Ansicht ist, dass sie ein HTML-Look-and-Feel hat, so dass Front-End-Entwickler oder Leute, die PHP nicht kennen, leicht mit der Datei arbeiten können, ohne verwirrt zu werden / p>

Aktualisieren

Um mehr über MVC im Allgemeinen zu erfahren, können Sie einige davon sehen (es gibt eine Menge Tutorials da draußen):

Ссылка

Ссылка

Ссылка

Um konkrete Beispiele von PHP zu sehen, die MVC verwenden, schlage ich vor, einige der anspruchsvolleren Frameworks herunterzuladen (z. B. CodeIgniter , Symphony oder Drupal ) und einfach nur den Code durchsehen. Versuchen Sie herauszufinden, wie es funktioniert, und erstellen Sie anschließend die Funktionalität für ein einfaches artikelbasiertes System neu.

    
Jeff Lambert 27.07.2012, 13:53
quelle
19

Hier sind einige Dinge, die Sie beachten müssen:

  • Sie können klassische MVC nicht in PHP verwenden. Stattdessen haben wir MVC-inspirierte Muster
  • Es gibt eine 1: 1-Beziehung zwischen View- und Controller-Instanzen, wenn sie für das Web implementiert wird
  • Modell in MVC ist keine Klasse. Es ist eine Ebene, die viele verschiedene Klassen enthält
  • View ist keine dumme Vorlage, sondern eine Instanz der Klasse, die sich mit der Präsentationslogik beschäftigt

Im webbasierten MVC anzeigen

Wie bereits erwähnt, sind Ansichten in MVC- und MVC-inspirierten Mustern für die Präsentationslogik verantwortlich. Dazu gehören Dinge wie das Anzeigen von Fehlermeldungen und Paginierung. Zu diesem Zweck kann jede Ansicht mehrere Vorlagen verarbeiten.

View empfängt Informationen von der Modellschicht und verhält sich entsprechend. Die Art, wie die Informationen aus der Modellschicht in Ansichten landen, ist einer der wichtigsten Unterschiede in MVC-ischen Mustern:

  • klassisches MVC Muster

    Strukturen aus der Modellschicht senden die Informationen zur Ansicht, wenn der Status des Modells geändert wurde. Dies geschieht über das Beobachtermuster .

  • Model2 MVC und HMVC Muster

    View hat direkten Zugriff auf die Modellschicht und kann Informationen von ihr anfordern. Dies ist dem ursprünglichen Muster am nächsten.

  • MVVM und MVP Muster

    View empfängt Informationen über den Controller, der es wiederum von der Modellschicht angefordert hat. Der weitere Unterschied in den Mustern ergibt sich aus dem, was die Daten tun, bevor sie zur Ansicht gelangen.

Was Sie jetzt zu haben scheinen, ist eigentlich nur eine Vorlage. Ähnlich einem, der in diesem Artikel beschrieben ist. Sie haben eine Struktur, in der die Präsentationslogik nicht enthalten ist. Auf lange Sicht wird dies dazu führen, dass die Präsentationslogik in den Controller geschoben wird.

Also was ist mit dieser "Willkommensnachricht"?

Um die Willkommensnachricht anzuzeigen, sollte Ihre Ansicht von der Modellschicht den Namen des aktuellen Benutzers anfordern. Wenn die Modellschicht einen Fehlerstatus zurückgibt, wählen Sie die Fehlermeldungsvorlage aus und fügen Sie sie in das Layout ein.

Wenn der Name des Benutzers ohne Probleme aus der Modellschicht abgerufen wurde, wählen Sie die Vorlage aus, die die Begrüßung enthalten soll, legen Sie den Wert in der Vorlage fest und rendern Sie sie.

In welcher Reihenfolge sollen Teile geladen werden?

  

Die Idee, dass der Controller Modell und Ansicht initialisieren sollte, stammt von einer sehr primitiven Interpretation von MVC für das Web. Muster kennen sich als Seiten-Controller , der versuchte, MVC direkt auf statische Webseiten zu übertragen.

Meiner Meinung nach sollte dies die Reihenfolge sein:

  1. Modell

    Sie initialisieren die Struktur, über die Sie mit der Modellschicht arbeiten. Es wäre wahrscheinlich eine Art Service-Factory, mit der Sie Dinge wie Authentication service für Logins und Library service für den Umgang mit Dokumenten erstellen könnten. Sachen wie diese. Ich habe ein bisschen länger einen Kommentar zur Struktur der Modellschicht geschrieben. Sie könnten es nützlich finden.

  2. Anzeigen

    Sie erstellen eine View-Instanz basierend auf Informationen, die Sie aus dem Routing-Mechanismus gesammelt haben. Wenn Sie Model2 oder HMVC implementieren, benötigt Ihre Ansicht im Konstruktor eine Instanz von Service Factory .

    Wenn Sie MVVM oder MVP implementieren, hat der Konstruktor von view keine besonderen Anforderungen.

  3. Controller

    Dies ist die letzte Struktur, die Sie erstellen, da der Controller dafür verantwortlich ist, Befehle sowohl an die Ansicht als auch an die Modellschicht zu senden, die sich dann ändern und dann den Status beider ändern. Daher sollte der Controller erwarten, im Konstruktor sowohl View- als auch Service Factory zu erhalten.

Nachdem die grundlegenden Elemente von MVC initialisiert wurden, rufen Sie eine Methode auf dem Controller auf und rendern die aktuelle Ansicht.

Denken Sie daran, dass dies eine sehr vereinfachte Beschreibung ist.

    
tereško 27.07.2012 15:38
quelle

Tags und Links