Heim > Artikel > Backend-Entwicklung > Yii Framework Offizieller Leitfaden Serie 15 – Grundlagen: Best MVC Practices
Obwohl Model-View-Controller (MVC) bei fast jedem Webentwickler bekannt ist, wie wird er in der tatsächlichen Anwendungsentwicklung eingesetzt? Die Verwendung von MVC bereitet vielen Menschen immer noch Probleme. Die Kernidee hinter MC ist die Wiederverwendbarkeit des Codes und die Trennung von Logik und Ansichten . In diesem Abschnitt beschreiben wir, wie Sie MVC besser zum Entwickeln von Anwendungen verwenden können, wenn Sie das Yii-Framework verwenden.
Zur besseren Erklärung gehen wir davon aus, dass die Webanwendung die folgenden Unteranwendungen enthält:
Frontend: eine öffentliche Website-Schnittstelle für Endbenutzer;
Backend: Bietet Verwaltungsfunktionen zur Verwaltung der gesamten Website-Anwendung, auf die normalerweise nur Administratoren zugreifen und sie verwenden können.
Konsole: Kann in einem Terminalfenster ausgeführt werden Anwendungen, die Konsolenbefehle enthalten;
Web-API: Bietet eine Schnittstelle für Dritte zur Interaktion mit dieser Anwendung.
Diese Unteranwendungen können in Form von Modulen implementiert werden oder es kann sich um Yii-Anwendungen handeln, die Code mit anderen Unteranwendungen teilen.
Modelle stellen die zugrunde liegende Datenstruktur einer Webanwendung dar. Beispielsweise kann es sich um ein LoginForm
-Modell handeln Wird sowohl vom Front-End als auch vom Back-End einer Anwendung verwendet. Ein News
-Modell kann daher von den Konsolenbefehlen, Web-APIs und dem Front-/Back-End einer Anwendung verwendet werden 🎜>
SearchForm
search
News
getLatestNews
getDeletedNews
Definieren Sie eine
NewsBase
Definieren Sie in jeder Unteranwendung ein
News
NewsBase
News
Wenn wir also diese Strategie in unserem obigen Beispiel anwenden würden, würden wir ein
-Methode enthält.News
getLatestNews
Im Allgemeinen sollten Modelle keine Logik enthalten, die sich direkt mit Endbenutzern befasst. Genauer gesagt sollten ModelleNews
getDeletedNews
nicht
,$_GET
$_POST
Es sollte vermieden werden, HTML oder anderen Präsentationscode einzubetten. Da der Präsentationscode je nach den Anforderungen des Endbenutzers variiert (z. B. können Front-End und Backend die Details einer Nachricht in völlig unterschiedlichen Formaten anzeigen), sollte er besser durch Ansichten berücksichtigt werden.
2. Ansichten
sein enthalten hauptsächlich Präsentationscode wie HTML und einfachen PHP-Code zum Durchlaufen, Formatieren und Rendern von Daten.
Es sollte vermieden werden, Code zu enthalten, der explizite DB-Abfragen ausführt. Solcher Code sollte besser in Modellen platziert werden .
sollte den direkten Zugriff auf
,kann direkt auf Eigenschaften und Methoden von Controllern und Modellen zugreifen. Dies sollte jedoch nur zu Präsentationszwecken erfolgen.
Ansichten können auf unterschiedliche Weise wiederverwendet werden:
Layout: gemeinsame Präsentationsflächen (z. B. Seitenkopf, Fußzeile) können in eine Layoutansicht eingefügt werden.
Teilansichten: Verwenden Sie Teilansichten (Ansichten, die nicht durch Layouts dekoriert werden), um Fragmente des Präsentationscodes wiederzuverwenden. Beispielsweise verwenden wir _form.php
Teilansicht, um das Modelleingabeformular darzustellen, das sowohl auf den Modellerstellungs- als auch auf den Aktualisierungsseiten verwendet wird.
Widgets: wenn für die Präsentation viel Logik erforderlich ist B. eine Teilansicht, kann die Teilansicht in ein Widget umgewandelt werden, dessen Klassendatei der beste Ort ist, um diese Logik zu enthalten. Für Widgets, die viel HTML-Markup generieren, ist es am besten, für das Widget spezifische Ansichtsdateien zu verwenden, um das Markup zu enthalten.
Hilfsklassen: In Ansichten benötigen wir oft einige Codeausschnitte, um das Markup zu enthalten Erledigen Sie kleine Aufgaben wie das Formatieren von Daten oder das Generieren von HTML-Tags. Anstatt diesen Code direkt in den Ansichtsdateien zu platzieren, besteht ein besserer Ansatz darin, alle diese Codeausschnitte in einer Ansichts-Hilfsklasse zu platzieren. Dann verwenden Sie einfach die Hilfsklasse in Ihren Ansichtsdateien. Yii liefert ein Beispiel für diesen Ansatz. Yii verfügt über eine leistungsstarke CHtml-Hilfsklasse, die häufig verwendeten HTML-Code erstellen kann. Hilfsklassen können in einem automatisch ladbaren Verzeichnis abgelegt werden, sodass sie ohne explizite Klasseneinbindung verwendet werden können.
Controller sind der Klebstoff, der Modelle, Ansichten und andere Komponenten zu einer ausführbaren Anwendung zusammenhält. Controller sind für die direkte Bearbeitung von Endbenutzeranfragen verantwortlich. Daher können Controller
auf $_GET
, $_POST
und andere PHP-Variablen zugreifen, die Benutzeranfragen darstellen;
können Modellinstanzen erstellen und verwalten ihre Lebenszyklen. Beispielsweise kann der Controller bei einer typischen Modellaktualisierungsaktion zunächst die Modellinstanz erstellen. Füllen Sie dann das Modell mit der Benutzereingabe von$_POST
; Nach erfolgreichem Speichern des Modells leitet der Controller den Benutzerbrowser möglicherweise zur Modelldetailseite weiter. Beachten Sie, dass sich die eigentliche Implementierung zum Speichern eines Modells im Modell und nicht im Controller befinden sollte.
Es sollte vermieden werden, eingebettete SQL-Anweisungen zu enthalten, die besser in Modellen aufbewahrt werden.
sollte vermeiden, HTML oder andere Präsentations-Markups zu enthalten. Dies wird besser in Ansichten aufbewahrt.
In einer gut gestalteten MVC-Anwendung sind Controller oft sehr dünn und enthalten wahrscheinlich nur ein paar Dutzend Codezeilen; während Modelle sehr umfangreich sind und den größten Teil des Codes enthalten, der für die Darstellung und Bearbeitung der Daten verantwortlich ist. Dies liegt daran, dass die durch Modelle dargestellte Datenstruktur und Geschäftslogik typischerweise sehr anwendungsspezifisch ist und stark angepasst werden muss, um die spezifischen Anwendungsanforderungen zu erfüllen. während die Controller-Logik in allen Anwendungen häufig einem ähnlichen Muster folgt und daher durch das zugrunde liegende Framework oder die Basisklassen durchaus vereinfacht werden kann ,更多相关内容请关注PHP中文网(www.php.cn)!