Take: OOP (in PHP) - 3 Fragen

Beitrag lesen

Moin,

Vorschlag:
load.php ist ein eigenständiges Script, sozusagen der Handler für jeden Request und auf den wird alles per rewrite umgeschossen.

Ja klar, so läuft das doch: Es gibt eine index.php und die kriegt den GET-Parameter page der angibt, welche Seite geladen werden soll. Per mod_rewrite täusche ich dann eine normale Dateistruktur vor.

Du sprichst von einer "Verwaltung der Seiten", das passt, gute Idee! Geht dann wie folgt weiter: load.php kriegt den Request, ermittelt aus REQUEST_URI den PATH und fragt in der Verwaltung nach, ob es den gibt. Wenn ja, wird ein Response-Object (Instanz Deiner Klasse) erstellt, wenn nein, ein 404 geworfen.

Das ist ja meine Frage 2: Wo geschieht das alles? Innerhalb einer Klasse? Klatsche ich das jetzt einfach als Code in eine .php?

Im Ja-Zweig gehts dann so weiter: Das Response-Object ruft nun die Methoden auf, welche die Seite erzeugen. Eine weitere Kontrolle prüft, ob Parameter anliegen. Somit können nun alle möglichen Content-Types ausgegeben oder ein Template bestückt und ausgegeben werden.

Alles kein Problem.

Keine Umleitung. Entweder wird eine fehlerhafte Eingabe über einen festen Platzhalter im Template geführt oder der Body wird komplett gegen eine Fehlerseite ausgetauscht. Umleitungen sind Mist, das verwirrt den Besucher und erschwert Deine eigene Fehlersuche.

Das war glaub ich ein bisschen unglücklich ausgedrückt. Was ich meinte war: Die Klasse "page" versucht die angeforderte Seite zu laden (Überprüft ob die Datei existiert). Was tut sie, wenn die Datei nicht existiert? Automatisch die 404-Seite laden? Oder einfach nur false zurückgeben und irgendwo anders (wo?) wird dann ermittelt, dass die 404-Seite im Falle einer nicht gefundenen Seite geladen werden muss und der Klasse gesagt, sie solle jetzt die 404-Seite laden.

dann die Klasse die Fehlerseite laden?

Mach es nicht so kompliziert. Jede Fehlerbehandlung kann über das Response-Object (Instanz Deiner Klasse) abgewickelt werden.

Ich machs nicht kompliziert, ich hab nur gefragt, weil ich mir nicht sicher war: Lädt die Klasse "page" automatisch eine Fehlerseite, oder wird ihr das von außen gesagt?

  • Die letzte Frage, die eigentlich aus den anderen beiden hervorgeht ist, ob man sowas wie Session-Initialisierung,

Wenn Du eine Verwaltung hast, haben die Response-Objecte auch Attribute. Eins davon legt fest, ob Session oder nicht Session.

Was meinst du mit "Verwaltung"?

* Diese Klasse stellt ein paar statische Methoden zur Verfügung, die die eigentliche Funktionalität des CMS ausmachen: Dateien mit gleichzeitigem Locking laden und dann das enthaltene JSON parsen und zurückgeben, etc. etc.

Ich mache das mit Templates. Beispiel:
/foo.html
ist ein Formular mit dem Platzhalter %result fürs Ergebnis. Der Controler (Methode Deiner Klasse CMS) prüft den Request, der kann vom Submit (S) kommen oder es ist Ajax (A).

Submit) das Template wird neu geladen %result mit dem Ergebnis bestückt
Ajax) es wird nur das Ergebnis als JSON gesendet und per DOM das %result beschrieben

Das beantwortet jetzt glaub ich indirekt meine Frage: Es gibt einen Controller, der eben alles "kontrolliert". Der wird einfach am Anfang aufgerufen und macht dann den Rest. Im Hauptscript steht also nichts, außer dem Controlleraufruf, oder?
Das mit den Templates hab ich mir auch schon so vorgestellt, wie du es beschreibst. Aber ist "submit" hier nicht der falsche Begriff? Ich würd es eher als Request bezeichnen, wobei Ajax ja auch ein Request ist... Aber müsste dieses Überprüfen ob Ajax oder "normaler" Request, nicht eher Teil einer Extra-Klasse "template" sein, die das laden und bestücken der Templates übernimmt?
Insgesamt, merke ich jetzt, ist das Thema echt komplex. Man könnte jetzt seine alten nicht-OOP-Scripte einfach so hinbiegen, aber dann hat man das OOP ja nur um des OOP Willen und nutzt die Vorteile gar nicht (bzw. kann es nicht). Viel zu lernen... Gibts da evtl. Literaturempfehlungen (Deutsch wäre schön :D)?

Gruß,
Take