Thread CGI-Baukasten (23 answers)
Opened by rosti at 2011-12-05 13:17

rosti
 2011-12-04 11:29
#154634 #154634
User since
2011-03-19
3212 Artikel
BenutzerIn
[Homepage]
user image
Schlechtes Wetter? Zeit zum Tüfteln!!!

Also: Mein neuer CGI-Baukasten ist fertig ;)

Basis ist mode_rewrite, das schießt alle Requests auf ein Perl/CGI-Script um, hier liegt die main() und da wird nur noch festgestellt, ob es Parameter gibt oder keine. Es gibt eine Konfiguration, die als ini-Datei editierbar ist, hierin stehen alle [/URLs], die requestet werden dürfen. Diese URLs haben ini-Parameter wie title und descr und den Namen der Methode, die im Fall von POST/GET-Parametern aufgerufen werden. Außerdem kann es zum [/URL] eine Methode geben, die ohne POST/GET-Parameter greift, beispielsweise um das aktuelle Datum ins Template zu setzen.

Zu jedem URL gibt es ein Template, z.B. ein Formular. In der main() wird über meine Reponse-Klasse das Response-Objekt erstellt, was im Attribut auch den HTTP_STATUS 200 oder 404 hat.

Am Schluss wird mit einer einzigen Print-Anweisung alles zusammen ausgegeben: header, start_html, menu, body, end_html;

Vorteil:
Neue Anwendungen sind im Handumdrehen integriert, es ist die ini-Konfiguration zu editieren und ein Template zu erstellen, fertig. Sollen POST/GET-Parameter verarbeitet werden, ist nur noch eine Methode zu schreiben, welche den {STASH} mit Daten bestückt oder bei fatalen Fehlern ein [ERR]-Array schreibt (die Err-Seite wird dann automatisch ausgegeben).

Optional kann es auch eine Methode geben, welche den {STASH} beim Aufruf der Seite ohne POST/GET-Parameter bestückt.

Das Ganze ist sehr kompakt geworden, das eigentliche Ziel der Entwicklung war es, Parameter-Kontrollstrukturen zu verkleineren, das erfolgt dadurch, dass die Control-Method dem jeweiligen URL zugeordnet wird und dank mod_rewrite mehrere URLs über die gleiche main() laufen. Unterschiedliche URLs können so konfliktlos gleiche Parameternamen haben. Alle Methoden sind innerhalb der Response-Class definiert, wobei ich auch von der Möglichkeit Gebrauch mache, eine package in mehrere Dateien.pm aufzuteilen.

Nachteil:
Als Content-Type einer Reponse ist nur text/html möglich und die Response wird immer als: header, start_html, menu, body, end_html; ausgegeben. Aber das war ja auch das Ziel ;)

Schönen Sonntag,
Rolf

modedit Editiert von pq: am ende 6 zeilen mit je einem leerzeichen gelöscht - bitte nicht wiederholen.

Splitted from Thread zum Freuen 2.0 msg #125588
Last edited: 2011-12-05 13:17:52 +0100 (CET)

View full thread CGI-Baukasten