| | | | |
| |||||||
| Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator und Wett-König | Hallo Trainmaster, das Thema ist bereits mehrfach diskutiert worden. Schau mal unter
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | |
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.269
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Ne, wenn ich jetzt http://www.example.org/news/list aufrufe, dann wandelt Mod-Rewrite das ja beispielsweise um in: index.php?request=news/list Nun zerlegt der FrontController diese Anfrage in Controller = news Action = list (lassen wir die Module mal weg). Jetzt sucht er in deinem Controllerverzeichnis nach einer Datei "NewsController.php" und der darin befindlichen Klasse "NewsController". Die wird instanziert, bekommt den Request übergeben. OK, erste Hürde geschafft. Jetzt wird geprüft, ob die Methode "listAction" der NewsController-Klasse existiert. Wenn nein, 404 (Nicht gefunden) Errorhandling antriggern (z.B. per Exception), gleiches für fehlenden Controller. Falls gefunden -> aufrufen! Fertig. Jetzt musst du eigentlich nur eins tun wenn du eine neue "Route" (ich schreibs mal in Anführungszeichen) erstellen willst: Du erstellst eine Controller-Klasse und die dazugehörige Methode. Das wars, kein switch() mehr. Zusätzlich sinnvoll: Eingabevalidierung (also Controller und Action-Bezeichner validieren/normalisieren, so dass gültige Klassen- bzw. Methodennamen herauskommen, was ja bei "my-news" nicht der Fall wäre) Jeder Controller muss Instanz eines Controller-Interfaces (oder einer abstrakten Controller-Basisklasse) sein Jede Action muss auch als Action-Methode im Controller definiert sein (damit dir keiner __construct aufruft o.ä. Spielchen). (damit dein MVC nicht zum RPC/RMI mutiert)
__________________ "Nuschel ich?" - "Was?" |
| | |
| | ||||
| Erfahrener Benutzer Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse: Anfänger ![]() | Zitat:
Zitat:
Zitat:
Zudem würde ich das Vorgehen etwas anders angehen. Nachdem "list" nicht unbedingt eine Action sein muss, würde ich zunächst in einem Art Verzeichnis des NewsController überprüfen, welches weitere Vorgehen bei "list" zu wählen ist. Es kann doch sowohl ein weiterer Controller verlangt werden als auch die Ausführung einer Methode? | |||
| | |
| | |
| Moderator Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | In einer Klasse sollte man möglichst so wenig wie möglich mit irgendwelchen globalen variablen, wie z.b. get, post, etc arbeiten, das schafft abhängigkeiten, macht code schlechter testbar, etc
__________________ robo47.net - Blog, Codeschnipsel und mehr | |
| | |
| | |||||
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.269
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
Also starr und willkürlich widerspricht sich meiner Meinung nach. Bei starr könnte ich dir recht geben (Convention over Configuration), aber ich sehe das als Vorteil. Denn ich will ja das jeder weiß, welche URL auf welche Controller-Action umgemappt wird. Gleichzeitig bleibe ich aber flexibel, wenn ich neue Routen einführe. Starr ist allerdings, da hast du Recht die Struktur: Modul, Controller, Action. Mehr Tiefe gibt es nicht. Zumindest nicht beim MVC. Zitat:
Wie gesagt, das sehe ich als Vorteil an. Zitat:
Zitat:
__________________ "Nuschel ich?" - "Was?" | ||||
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|