Andreas Korthaus: Modulares Programmieren mit PHP

Beitrag lesen

Hi Christian!

jepp ;-)
schon komisch, dass wir beide den selben Thread verlinken...

Hab mich auch gewudert ;-)

Die Basisklasse, die Backendklassen und die Klasse für den Bilderupload, die von der Basisklasse abgeleitet ist.

von der Basisklasse abgeleitet? Was bedeutet das schon wieder? Heißt die Frontendklasse Bilderupload wird von der Basisklase geladen(include) und instanziert(new...)? Oder erweiter mit extends...?

Ja. Frontend ist *nur* das, das *direkt* auf Benutzereingaben reagiert und "Ablaufslogik" enthält. (ich hoffe, Du verstehst, was ich meine)

immer etwas mehr ;-) Aber den Teil habe ich jetzt glaube ich auch.

Nicht ganz. Dieser Link geht zum Standardscript, das in diesem Fall (per URL-Parameter gesteuert) die Upload-Frontend-Klasse verwendet.

Also doch alles über ein Script. Dann läuftz das ganze also anders herum, das Basis-Script bindet das file-upload-Script ein, ich brauche als kein include("basis.modul.php") in jedem Script. OK. Und wie mache ich es das statt der URL mein basis-script aufgerufen wird? mod_rewrite? Wie habe ich mir das vorzustellen?

RewriteEngine On
RewriteRule ^(.*)$ /basis_script.php?params=$1 [L]

oder wie? Sollten dann links im Dokument besser alls absolut sein, oder? Vor allem Bilder...

Nein, die Upload-Frontend-Klasse brauchst Du jetzt immer, nur eine eventuelle existierende Backend-Klasse existiert noch nicht. Du kannst Dir unter "Frontend" ein Modul vorstellen, Du musst nicht unbedingt eine Klasse verwenden, eine Datei, die included wird oder eine Funktion könnte die aufgabe auch bewältigen.

OK. Also habe ich für alle Aktionen _eigene_ Frontend-Module/Klassen, nicht wir ich dachte _ein_ Frontend ;-) Das konnte ich mir schwer vorstellen.
OK. Also das Basismodul bindet dieses File-Upload Frontend-Modul ein, in diesem Modul regele ich sowohl die Ausgabe als auch das Auslesen der Daten. In dem Modul verwende ich halt smarty für die Ausgabe, mit der Logik(Parameter...GET/POST...) wie ich sie dann auch erwarte. Das heißt ich generiere das Forumular und sage ist POST und der Parameter soll "upfile" heißen. Dann bekommt der User das Formular, schickt das ab, es wird aufgrund des Requerst-Strings wieder dasselbe Modul geladen, jetzt muß ich am Anfang des Moduls merken, das Daten in den Umgebungsvariablen stehen, also z.B. if($_FILES['upfile']['name']) => übergebe die Daten über die definierte Schnittstelle an das Backend-Modul, also erstelle eine Instanz... der file_uplaod Klasse, welches die Aktionen ausführt, am Ende wird geprüft, ob Fehler aufgetreten sind und demnach wieder eine Ausgabe erzeugt.

Wo wird diese Klasse genau geladen?
Du meinst "included"? Vor der Verwendung, entweder werden alle Dateien mit allen Frontend-Klassen eingelesen, oder nur kondizional je nach Anfrage.

Wie sieht das denn praktisch aus? Die Datei-Upload Klasse wird nur geladen, wenn der Request an /file_upload.php geht. In welcher Form speichere ich diese Information? Oder gehört das noch zu den "Meta-Daten" zu jedem Modul die am Anfang aus einer txt-File ausgelesen werden? Denn irgendwie muß ich ja an die Prüfung if($request_file=="file_upload.php") include("file_upload_frontend.php")

Wo wird eine Instanz erstellt?
An der Stelle, wo klar ist, dass das Upload-Frontend verwendet werden soll.

Also innerhalb des Moduls, oder schon direkt nach dem includen ins basis-Script?

Aber auch mit der Basisklasse bin ich noch nicht so ganz warm. Was soll die Klasse denn genau machen außer ein paar feste Daten wie root_path und root_url zur Verfügung zu stellen?

|

Im Prinzip gar nichts... :-)

Aber sie läd immerhin alle notwendigen Module etc.

P.S.: Alles, was ich hier schreibe, ist mit meiner Einstellung behaftet, wie ich es realisieren würde. Aber Du darfst nie aus den Augen verlieren: Es gibt tausende Möglichkeiten, das zu realisieren.

Das ist mir bewußt, aber ich bin Dir sehr dankbar für Deine Anregungen, vermutlich muß ich das einmal komplett durchziehen, auch wenn das nicht alles auf meinen Mist gewachsen ist, aber dan bekomme ich wenigstens mal eine bessere Idee vom modularen Programmieren, und ab da entwickele ich eigene Vorlieben und eigene Lösungen.

Nochmals vielen Dank für Deine Geduld ;-)

Viele Grüße
Andreas