dedlfix: PHP Skriptkontrolle durch zentrale Kontrolldatei

Beitrag lesen

echo $begrüßung;

Damit baust du einen Routing-Mechanismus nach, der eigentlich Aufgabe des Webservers ist. Andererseits ist es aus der PHP-Programmierer-Sicht einfacher, nur eine Datei zu pflegen, die die gleichbleibenden Teile enthält und die wechselnden weiterdelegiert, als viele Dateien, die immer wieder die gleichbleibenden Teile mittels des gleichen Codes einbinden.

Ich verstehe nicht ganz den "Routing-Mechanismus" .. Meinst du als Routing das weiterleiten mittels header()?

Nein, damit meine ich den Mechanismus, der anhand einer übergebenen URL entscheidet, welche Ressource ausgeliefert wird. Der Webserver kann diese Ressource in einer bestimmten Datei finden, oder ein Script aufrufen, das anhand der Parameter mal Dies und mal Jenes zurückgibt.

(Muss ich nicht automatisch weiterleiten, wenn ich z.B. die Daten eingetragen hab und dann wieder zur Ausgabe will ? oder wenn ich die Daten checke und dann wieder auf das selbe Script weiterleite?

Es ist sicher empfehlenswert, nach Entgegennahme und Eintragen der Daten ein Redirekt auf die Anzeigefunktion zu veranlassen. Man könnte aber auch einfach so als Antwort auf die erfolgreiche Eintragung die Daten die Ausgabe der Anzeigefunktion zum Client senden. Checken und Eintragen macht ein Script in Personalunion. Wenn erfolgreich geprüft wurde, trägt es die Daten ein, ansonsten liefert es das Formular plus Daten zum Korrigieren aus. Die Formular-Action verweist dabei immer wieder auf dieses/dasselbe Script.

ok, das hört sich natürlich sinnvoll an .. jetzt habe ich aber das Problem, dass ich z.B. um in ein bestimmtes Feld Daten einzutragen ein anderes Such-Formular aufrufen muss ... von dem ich, nach einer Suche und der Auswahl, wieder zurück in mein Add-Formular muss mit den vorher eingetragenen Daten... Dabei muss ich ja die vorherigen Daten halten und da habe ich eigentlich nur die Session als Möglichkeit gesehen. (ok, abgesehen von unglaublich vielen hidden-fields)

Du hast also ein Formular, machst beim Ausfüllen mal einen Schritt seitwärts und wieder zurück. Wenn sich das nicht so umschreiben lässt, dass der Schritt seitwärts zuerst und vor dem eigentlichen Ausfüllen ausgeführt werden kann, dann sehe ich auch die Session als sinnvollen Ablageort an.

Add und Change sollen hier nur Aktionen sein, ohne dass dabei festgelegt ist, wie sie aufgerufen werden. Ob sie ein eigenes Script sind oder von einem von PHP ausgeführten Verteilmechanismus angesprochen werden, ist prinzipiell egal.

(wenn du hier von einem "eigenen script" redest, bedeutet das z.B. ein include der entsprechenden Skriptdatei, oder?

Damit meine ich, dass die Verteilung außerhalb PHPs stattfindet und der Webserver beispielsweise entweder add.php oder list.php statt allInOne.php?action=add (oder action=list) aufruft.

ein Verteilmechanismus würde ja sowieso benötigt werden um die entsprechende Skriptadatei herauszufinden, oder?

Der Verteilmechanismus ist einer der beiden erwähnten Routing-Mechanismen.

Du brauchst die Session nur als Krücke, weil du den Client noch einen Roundtrip in Form eines Location-Headers machen lässt. Vermeide dies und du benötigst die Session nicht mehr (dafür).

Das kommt eigentlich nur vor wenn ich noch in unterfromulare gehen muss, und die alten Daten halten muss.

Es ist für mich nur schwierig ein Projekt jeweils konzeptionell anzufangen, und da komm ich einfach immer wieder auf die action festlegung durch request-parameter und die verteilung durch ein switch innerhalb einer zentralen datei die jeweils weiterleitet. Ist irgendwie recht übersichtlich und einfach etwas hinzuzufügen.

Wenn du eine Weiterleitung mittels Redirect meinst, dann empfinde ich das als einen unnötigen zusätzlichen Roundtrip. Da kannst du ja gleich auf das Ziel-Script leiten. Es sei denn, du meinst eine Weiterleitung zu einem (inkludierten) Script-Teil.

Durch direkte Scripteinbindunge würde ich jeweils bei auflistungen mit links und entsprechenden scriptdatien aufrufen, bzw. bei formularen das entsprechende Skript als action eintragen. Eine zentrale Datei würde lediglich den Einstieg bzw. die Ausgabe nach Erfüllung bestimmter Aufgaben bedeuten .. alles andere geht durch direkten scriptaufruf.

Ich würde mich generell (also für jedes Projekt einzeln) für eins von beiden entscheiden. Entweder jede Aktion in eine eigenes Script legen oder einen zentralen Einstieg mit Verteilung.

Du kannst ja mal zum Sammeln von Erfahrung mit den beiden Vorgehensweisen jeweils ein kleines Beispielprojekt anlegen, mit vielleicht einer Handvoll Aktionen (echo 'Aktion 1'; usw.). Diese aber so anlegen wie bei einem großen Projekt. Also, wenn du pro Aktion eine zu inkludierende Datei nähmst, machst du das hier auch so. Dann denkt die ein paar Änderungen aus, wie Stil-Änderung (Hintergrund soll nun grün statt blau sein) oder Inhaltsänderung (der auf jeder Seite angezeigte Projektname ändert sich), und schaue wie einfach/kompliziert sich dies jeweils erledigen lässt.

echo "$verabschiedung $name";