Ich komme aus verschiedenen MVC-Frameworks (z. B. Symfony) zu Magento. Ich lese viel über Best Practices von Magento und kann sehen, dass Magento nicht den typischen MVC-Stil verwendet. Alan Sturm schrieb das folgende:Magento - Die beste Art, Formulare in Blöcken zu bearbeiten?
es ist nicht in der Verantwortung der Steuerungsvariablen für die Ansicht, um [...] Controller hat die Aufgabe, bestimmte Dinge zu Models zu tun ist, und dann das System zu sagen, es ist das Layout-Rendering Zeit.
Ich denke, ich verstehe diesen Ansatz, da dies eine Art von Flexibilität für Blöcke bieten kann.
Rechts. Aber was ist mit Formen?
In einem typischen MVC-Framework erhalten Sie die Anforderungsparameter in der Steuerung, validieren Formulardaten in der Steuerung, machen Modelloperationen (speichern, laden, etc) oder ggf. Umleitungen, und wenn alles sauber und ordentlich ist, Sie stellen die frisch gebackenen Ausgabestücke für die Ansicht zur Verfügung.
In Magento sollte das alles innerhalb eines Blocks passieren und der (dünne) Controller soll nur das Layout vorbereiten und dann rendern. (Wenn ich das verstehe.)
Ich habe versucht einen Artikel zu finden (Handbuch, Forumthema, alles), der eine Erstellungsschritte eines separaten Moduls mit einem eigenen neuen Modell beschreibt, das über ein Formular im Frontend bearbeitet werden kann vom Benutzer. Ich würde gerne sehen, wie ein benutzerdefiniertes Formular im Frontend funktionieren sollte. Ich habe nur allgemeine Artikel über Blöcke, Formulare, Ändern oder Erstellen von Verwaltungsformularen oder Anpassen von Kontakt- oder Newsletter-Anmeldeformularen gefunden.
Ich habe es gemacht. Es funktioniert jetzt, aber ich bin nicht zufrieden. Also habe ich den Quellcode des Kontaktformulars im Core-Modul überprüft, und diese haben das ganze Bild für mich durcheinander gebracht. Das integrierte Kontaktformular verwendet den IndexController für die meisten der oben genannten Vorgänge (fast) wie einen Standard-MVC.
Könnte mir jemand eine Best Practice empfehlen, wie man einen einfachen Flow wie folgt verwaltet? (Ich habe eine Lösung für diese unten, aber ich bin mir nicht sicher, dass der „richtige Magento Weg“):
- Wenn die Seite geladen wird, zeigen eine Form in einem Block, die in enthalten ist die separate Seite
- Last ein Modellobjekt aus der DB durch einen Anforderungsparameter
- Populate Objektdaten in der Form
- Wenn der Benutzer das Formular, Prozessformulardaten legt, validieren sie
- Wenn Validierungsfehler zeigen die Formular erneut und Popup-Fehlermeldung
- I f OK, speichern Sie die Daten in die DB, zeigen eine Dankeschön-Seite
Meine Verwirrung vor allem um ist:
- Wo soll ich die Anfrage Parameter erhalten und verwalten? (Ich habe es in der Block-Klassendatei gemacht)
- Und laden Sie ein Objekt aus der DB, darauf basierend? (Auch, und dann an den phtml übergeben)
- Wie es an die Sicht übergeben, wenn ich es dort nicht laden würde? (Ich würde einen Weg kennen, aber ich kenne den besten Weg nicht.)
- Wo sollen die (POST-) Formulardaten verarbeitet, validiert und gespeichert werden? (Block?)
- Wie kann ich richtig Umleitungen in einem Block verwenden? Brauche ich eine Umleitung, da die Dankeseite ein anderer Block/eine andere Seite sein sollte? Oder nur ein alternatives (bedingtes) Aussehen des gleichen Blocks?
Danke Slayer, das habe ich vermutet. Das scheint viel sinnvoller zu sein! Ich stimme all Ihren Argumenten zu. Ich nahm etwas Ähnliches an, basierend auf meinem MVC-Wissen. Ich werde diese Kerncodes überprüfen. Sehr geschätzt! –