Hallo Christian!
Du schreibst eine Klasse Plugin, von der alle
Plugins abgeleitet werden muessen. Zur weiteren
Information: in PHP ist etwas wie
$class = "Klassenname";
$obj = new $class("blahr","blub");durchaus moeglich.
Wie würdedt Du denn einen Controller hierfür implementieren, also den Teil der Software der für das aufrufen einer Methode entsprechend dem Request zuständig ist, oder vielleicht auch nur include, oder man verwendet Apache als Controller in dem dieser entsprechend dem Pfad direkt das Script startet.
Angenommen man hat jetzt ein Plugin "kontakt", wo man so sachen wie irgendwelche Listen mit Ansprechpartnern, verschiedene Anfrageformulare... hat. Das heißt das Plugin hat verschiedene HTML-Templates die ausgegeben werden können.
-
würdest Du alle Requests über ein zentrales Script laufen lassen
-
wie würdest Du ausgehend vom Request des Clients die endgültige Funktionalität aufrufen, die z.B. das Kontakt-Formular laden soll?
? -
Woran würdest Du erkennen welches Plugin geladen werden soll?
würdest Du dann pro Plugin eine vererbte Plugin-Klasse haben, also z.B. "Kontakt extends Plugins", der die Request-Parameter übergeben und in der Konstruktor-Funktion dann entsprechend der gesendeten Parameter eine andere Methode laden, die dann z.B. das Template für das Kontakt-Formular läd?
So in etwa habe ich mir das nämlich überlegt, ich verwende ein Script "main.php", das per mod_rewrite alle Requests erhält.
Meine Requests sind so aufgebaut: /[pluginID]/[script]
Also z.B. /Kontakt/kontaktformular
So habe ich das bisher gemacht, und dann aus dem Plugins-Verzeichnis "Kontakt" das Script kontaktformular per include() eingebunden. Und das Script hat dann entsprechend entweder ein Template geladen, komplexere haben auch einen Switch der entsprechend weiterer Parameter das Vorgehen entscheidet, aber das war es im Prinzip.
Jetzt würde ich das ganze gerne besser abkapseln, also objektorientiert aufbauen.
Im Moment wüde ich es so machen:
Request: /[pluginID]/[action-methode]
und dann
include(APP_ROOT.$pluginID.'/main.class.php');
new $pluginID($action-methode,$_REQUEST,$_SESSION,$DB);
So prinzipiell, und dann in der Konstruktor-Methode vielleicht sowas wie
$this->$action-methode()
und darin dann machen was eigentlich gefordert ist, z.B. das Template für das Kontaktformular laden.
Aber das erscheint mir nochnicht wirklich rund, daher die Fragen hier ins Forum: Was haltet Ihr davon oder wie könnte man es besser machen?
Grüße
Andreas