Kurze Antwort
Es gibt keine solche Sache.
Längere Version:
Frameworks implementieren kein MVC- oder MVC-inspiriertes Entwurfsmuster. Ihre Bewerbung tut es.
MVC ist keine magische Sauce, die Sie Ihrer Anwendung hinzufügen können, indem Sie sie in einem Framework ablegen. Stattdessen müssten Sie dieses Muster (und die damit verbundenen Prinzipien und Praktiken wie SOLID , LoD , SoC ) tatsächlich lernen und verstehen . Nur dann können Sie versuchen, es innerhalb Ihrer Wahl eines Frameworks zu verwenden.
Wenn ein Framework ankündigt, dass es "MVC hat" , dann ist es völlig verrückt . In dieser Situation wird es verwendet, um das Framework an die Noobs zu "verkaufen", die sich mehr für den neuesten Hype als für das Anwendungsdesign und die Codierungspraktiken interessieren.
Das Ziel eines Frameworks wäre es, Ihnen eine Sammlung von Tools zur Verfügung zu stellen, die Ihnen als Ganzes eine veränderte / verbesserte Entwicklungsumgebung bieten. Sie befassen sich mit Routing, Autoloading, Abstraktionen auf niedriger Ebene für die Speicherung (nein, ich spreche nicht von Anti-Patterns für aktive Datensätze) und dem Rest der Dinge, mit denen Sie Zeit bei der Entwicklung und Wartung von Boh sparen können.
Abschließend.
Es gibt keine MVC-Frameworks in PHP. Alle, die dies für mich behaupten, gehören tatsächlich zu den schlimmsten. Nämlich - Codeigniter, Cakephp und Yii. Vermeiden Sie sie um jeden Preis (außer wenn Sie dafür wirklich gut bezahlt werden).
Wenn Sie benötigen einen Rahmen zu verwenden, die derzeit besten Optionen würden neueste Version von Symfony 2.x, Zend Framework 2.x oder Laravel 4.x. sein Diese implementieren MVC nicht für Sie, sondern schaden Ihrer eigenen Anwendungsarchitektur am wenigsten.
Ich kann nur mit Cake sprechen, und ich kann in Bezug auf MVC nichts Gutes dazu sagen. Sie wissen nicht tun MVC Recht. Codeigniter ist sehr ähnlich. Es ist überhaupt nicht seltsam, dass Sie MVC auch nach einer Weile nicht "bekommen" haben.
Bei MVC geht es einfach darum, drei verschiedene Komponenten der Logik Ihrer Anwendung richtig zu trennen: den Kern der App , die Präsentation und den Klebstoff, die erforderlich sind, damit beide in einem realen Kontext funktionieren.
Der Kern Ihrer App, der die gesamte Geschäftslogik, Datenbankinteraktion, Dienste, Pieptöne und Boops enthält, die Ihre App zu "Ihrer App" machen, ist das Modell. Das Modell ist keine bestimmte Sache in einer bestimmten Form, es ist alles Notwendige, damit Ihre App so funktioniert, wie sie funktioniert. Sie haben nur ein "Modell", nämlich Ihre App.
Die Ansicht wird verwendet, um auf irgendeine Weise auszugeben, was Ihr Modell tut. Es ist die Benutzeroberfläche. Es ist alles Notwendige, um dem Benutzer nützliche Informationen anzuzeigen. Dies kann eine Website sein, es kann eine Befehlszeilenschnittstelle sein, es kann eine native Desktop-GUI sein. Sie können alle drei in Ihrer App verwenden.
Der Controller ist einfach alles, was übrig bleibt, damit dies funktioniert, hauptsächlich das, was Benutzereingaben aufnimmt und an den entsprechenden Ort leitet. Möglicherweise verfügen Sie über verschiedene Arten von Controllern für verschiedene Arten von Kontexten, z. B. einen, der eingehende HTTP-Anforderungen verarbeiten kann, einen, der die Befehlszeileneingabe verarbeitet, und einen, der mit GUI-Ereignissen verbunden ist.
Welche besondere Form diese einzelnen Teile annehmen, hängt ganz von Ihrer App ab. Alle drei können eine Art eigene Mini-Anwendung sein. Jedes "Modell" des Template-Prefab-Frameworks wurde für einen allgemeinen Fall erstellt, damit Sie schnell etwas zum Laufen bringen können. Oft ist es nicht die optimale Form, die Ihr Modell annehmen sollte. Sie müssen eine eigene Struktur für Ihre App erstellen, unabhängig davon, was für die Erstellung am besten geeignet ist. Informieren Sie sich über OOP-Prinzipien, SOLID, Abhängigkeitsinjektion usw. und erstellen Sie Ihr Kernmodell gemäß diesen Richtlinien. Wickeln Sie dann nach Bedarf Ansichten und Controller darum.
Der Punkt dieser Trennung ist einfach, die App wartbar und erweiterbar zu machen. Das Modell enthält nichts, was für eine bestimmte Form der Eingabe oder Ausgabe spezifisch ist. Beispielsweise enthält es keinen formatspezifischen Text (wie Fehlermeldungen im HTML-Format). Es wird keine bestimmte Form der Eingabe angenommen (wie HTTP-Anforderungen). Umgekehrt enthält die Ansicht keine Geschäftslogik, sondern nur die Ausgabe . Und der Controller enthält auch keine Geschäftslogik, seine Aufgabe ist nur die "Eingabe" . Der Grund ist einfach, dass sowohl der Controller als auch die Ansicht austauschbar sind, Ihre App jedoch nicht.
Wenn Sie hierfür ein Framework verwenden möchten, verwenden Sie ein modulares Framework, mit dem Sie alles tun können, was Sie tun müssen. Hierfür eignen sich am besten Zend-, Symfony-, Laravel- und ähnliche komponentenbasierte Pick-and-Choose-Frameworks.
quelle
Book
), Diensten ("Aktionen", wiecollateBookCollection
) und Speicher (saveBookToDatabase
). Was Sie beachten müssen, ist, dass Sie nicht zu viel Code in den Controller einfügen, was Cake & Co. ist. völlig falsch verstehen. Machen Sie Ihr Modell stattdessen richtig fett.domain
Ein solcher Rahmen kann möglicherweise aus mehreren Gründen nicht existieren.
Zunächst ist das Modell im MVC-Muster der Teil, der Ihre Anwendung zu Ihrer Anwendung macht. Wenn ein Framework genau definieren würde, wie ein Modell aussieht, wäre dieses Framework nur für eine oder höchstens eine Handvoll Anwendungen verwendbar. Dies verhindert effektiv, dass es sich um ein Framework handelt.
Das zweite Problem ist, dass es keinen allgemeinen Konsens darüber gibt, wie eine ordnungsgemäße Anwendung des MVC-Musters aussieht. Einige sagen beispielsweise, dass der Controller der Ansicht die benötigten Daten aus dem Modell bereitstellen muss, während andere sagen, dass die Ansicht die benötigten Informationen selbst abrufen soll und der Controller nur sicherstellen sollte, dass die Ansicht weiß, wohin sie gehen soll Finde das Modell.
Ein weiteres Beispiel, das spezifischer für Webanwendungen ist, ist der Verarbeitungsaufwand, den die Ansicht ausführen kann. Für einige sollte die Ansicht ausschließlich aus HTML-Dateien bestehen, in denen einige Platzhalter durch den eigentlichen Inhalt ersetzt werden (normalerweise vom Controller aus dem Modell abgerufen), während andere mit der Verarbeitung der Benutzeroberfläche, z. B. Internationalisierung, vertraut sind des präsentierten Inhalts.
quelle
Ich verstehe, dass dieser Beitrag ein Jahr alt ist, was ironischerweise der Grund ist, warum ich diese Antwort poste. Zunächst einmal haben einige der Leute, die diese Frage beantwortet haben, Recht. Sie werden nie wirklich ein PHP-Framework finden, das sofort "MVC Ready" ist ... unbedingt. Da das Framework eine Grundlage sein soll, auf der Devs nach MVC aufbauen können. Im letzten Jahr, seit dies veröffentlicht wurde, haben einige der PHP-Frameworks einen langen Weg zurückgelegt.
Ich habe ein bisschen mit CakePHP rumgespielt, bis heute ist es eine schreckliche, chaotische Einrichtung von Verzeichnissen und Strukturen, es gibt keinen klaren Unterschied zwischen Logik, es hat ziemlich schlecht kommentierten Code und alles ist irgendwie in einem Bündel zusammengepfercht Chaos. Das ist wohlgemerkt kein Scherz über CakePHP, das ist eine einfache Wahrheit.
Zend ist ausgezeichnet. Sie bieten exzellente Dokumentation und Code-Kommentare, haben eine sehr freundliche Community und bieten einen sehr schönen Rahmen für Entwickler, die sowohl Anfänger als auch Fortgeschrittene sind. Sie haben einen langen Weg zurückgelegt, seit das OP dies veröffentlicht hat.
Und zu den Leuten, die sagen, dass es keinen solchen Rahmen gibt, um die Frage des OP zu beantworten, haben sie Recht, wie ich oben sagte. Sie sind aber auch falsch. Zend, Laravel und CodeIgniter sind erstaunliche Frameworks, und obwohl sie Ihnen keine MVC "geben", ebnen sie Ihnen als Entwickler definitiv den Weg, um eine wunderschön erstellte MVC-Anwendung zu erstellen, wenn man bedenkt, dass Sie als Entwickler einer guten MVC folgen Praktiken Methoden Ausübungen.
Für diejenigen in diesem Thread ist CodeIgniter schrecklich. Sie liegen völlig falsch, zumindest nach heutigen Maßstäben. Zum Zeitpunkt dieses Beitrags beschäftigte ich mich nicht mit Frameworks, also hatte ich es mir damals nicht angesehen. Daher könnte es damals schrecklich gewesen sein. Aber ich benutze es jetzt ALLE meine Webanwendungen. Sie leisten hervorragende Arbeit bei der Erstellung eines soliden Frameworks mit einer verständlichen Verzeichnisstruktur und bieten Ihnen einige erstaunliche Tools, mit denen Sie MVC'ing starten können. Sie leisten hervorragende Arbeit bei der logischen Unterscheidung, sie haben eine großartige Community für Support und sie bieten insgesamt ein großartiges, kostenloses Framework, das sich wiederum in einige erstaunliche Anwendungen verwandeln kann, wenn Sie gute MVC-Praktiken befolgen.
Zum Hauptpunkt. Ich wollte meine Meinung zu diesem Thema einbringen. Sie werden nie das perfekte, von MVC gebaute, sofort einsatzbereite Framework finden. Wenn Sie jedoch gute MVC-Praktiken anwenden und ein solides Framework wie Zend, Laravel und / oder CodeIgniter wählen, ist dies in Ordnung. Denn die rohe Wahrheit ist, dass die MVC dem Entwickler überlassen bleibt, wie er bewährte Verfahren implementiert und nicht das Framework. Das Framework bietet die Grundlage, der Rest liegt beim Entwickler.
Gute Frameworks als Referenz
Denken Sie daran, wenn Sie diese verwenden, liegt es an Ihnen als Entwickler, die guten MVC-Praktiken zu befolgen. Es gibt unzählige Tutorials zu guten MVC-Praktiken. Ich bin auf die Website eines Gentlemans gestoßen, die einige erstaunliche Richtlinien enthält, und er strebt eine ordnungsgemäße MVC an. Bisher waren seine Blog-Beiträge ziemlich verdammt gut, und er ist ein großartiger Ort, um mit dem Lernen zu beginnen.
Referenz
quelle
Es scheint, als hätten Sie nur Probleme, "alles zusammenzusetzen", weil viele Tutorials MVC nicht klar erklären können. Ich empfehle, dass Sie sich die Hände "schmutzig" machen und eine einfache Anwendung mit etwa 3 bis 5 verschiedenen Frameworks erstellen, um zu sehen, wie sie das Problem normalerweise angehen. Einige haben Dokumentation zum Einrichten der grundlegenden MVC-Architektur für eine Anwendung. Wenn dies nicht der Fall ist, können Sie immer ein paar MVC-Tutorials für dieses bestimmte Framework googeln.
FWIW Die Empfehlung für das Projekt- / Verzeichnislayout von Zend hat mir gefallen: http://framework.zend.com/manual/1.12/en/project-structure.project.html
Schauen Sie sich auch Rasmus '"Das No-Framework-PHP-MVC-Framework" an. Es zeigt, dass Sie kein Framework benötigen, sondern nur ein eigenes erstellen können, das Ihren spezifischen Anforderungen entspricht. Außerdem bekommst du einen Kick aus den Kommentaren! http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
quelle