Liebe Community,
ich würde gerne zu meinem kleinen MVC-Übungsprojekt einen FrontController hinzufügen und hab mir auch ein paar Beispiele angesehen.
und so wie ich die Sache verstanden haben, bindet der FrontContoller eine/die Unterklasse ein und führt dessen ausführbare Methode (Action) aus.
Dazu habe ich zwei Fragen:
1. In einigen Beispielen wird gezeigt, das sich der Fronentcontroller selber instantiiert. Aber Wieso? Ich meine die Instantiierung des FC wird
doch in der Bootstrap-Datei " index.php" gemacht, oder nicht? Wo liegt der Vorteil, wenn ich es so mache wie in den unteren Beispielen?
Beispiel aus einem Froncontroller
Selbst das Zend-FW macht es so:
Ich meine ich kann mir das nur erklären, das ich nicht extern extra mit einem new-Operator arbeiten muss und einfach nur schreibe Klasse::getInstance(); und die Klasse selber instantiiert sich selbst. Ist ja auch statisch. Hab ich jedenfalls noch nie so gesehen!
2. Wenn mein FrontController nun die Unterklasse geladen hat und ruft dessen Aktion - zB. run() - auf, wird die Unterklasse ausgeführt und wenn diese fertig ist, woher weiß der FrontController, dass er jetzt eine andere Unterklasse - ich sag mal Modul - aufrufen kann/soll.
ZB. soll nach einer erfolgreichen Authentifizierung (Unterklasse: AuthentClass) auf die Homeseite geleitet werden und der Benutzer will einen Blog schreiben. Dann müsste doch der FC den UnterController, für das Erstellen von Blogs, aufrufen?
Muss der UnterController "AuthentClass" dem FrontController mitteilen, das er fertig ist? Oder wartet der FrontController auf ein Request vom Benutzer, um zu prüfen, was danach geschehen soll?
Auf Hilfe von Euch bin ich wie immer sehr erfreut und danke Euch schon mal im Voraus.
LG, Davicito.
ich würde gerne zu meinem kleinen MVC-Übungsprojekt einen FrontController hinzufügen und hab mir auch ein paar Beispiele angesehen.
und so wie ich die Sache verstanden haben, bindet der FrontContoller eine/die Unterklasse ein und führt dessen ausführbare Methode (Action) aus.
Dazu habe ich zwei Fragen:
1. In einigen Beispielen wird gezeigt, das sich der Fronentcontroller selber instantiiert. Aber Wieso? Ich meine die Instantiierung des FC wird
doch in der Bootstrap-Datei " index.php" gemacht, oder nicht? Wo liegt der Vorteil, wenn ich es so mache wie in den unteren Beispielen?
Beispiel aus einem Froncontroller
PHP:
// Der Front Controller wird als Singleton Pattern implementiert, da wir ja nur eine Instanz pro Request haben wollen.
public static function getInstance($rootPath = null) {
// Falls es noch keine Instanz des FrontControllers gibt, wird hier eine instanziert.
if (! is_object(self::$instance)) {
if (is_null($rootPath)) {
throw new Exception('Es muss der Rootpfad angegeben werden!');
}
// Instanzieren des Front Controllers
self::$instance = new FrontController($rootPath);
}
// Instanz des FrontControllers zurück geben.
Selbst das Zend-FW macht es so:
PHP:
/**
* Singleton instance
*
* @return Zend_Controller_Front
*/
public static function getInstance()
{
if (null === self::$_instance) {
self::$_instance = new self();
}
return self::$_instance;
}
Ich meine ich kann mir das nur erklären, das ich nicht extern extra mit einem new-Operator arbeiten muss und einfach nur schreibe Klasse::getInstance(); und die Klasse selber instantiiert sich selbst. Ist ja auch statisch. Hab ich jedenfalls noch nie so gesehen!
2. Wenn mein FrontController nun die Unterklasse geladen hat und ruft dessen Aktion - zB. run() - auf, wird die Unterklasse ausgeführt und wenn diese fertig ist, woher weiß der FrontController, dass er jetzt eine andere Unterklasse - ich sag mal Modul - aufrufen kann/soll.
ZB. soll nach einer erfolgreichen Authentifizierung (Unterklasse: AuthentClass) auf die Homeseite geleitet werden und der Benutzer will einen Blog schreiben. Dann müsste doch der FC den UnterController, für das Erstellen von Blogs, aufrufen?
Muss der UnterController "AuthentClass" dem FrontController mitteilen, das er fertig ist? Oder wartet der FrontController auf ein Request vom Benutzer, um zu prüfen, was danach geschehen soll?
Auf Hilfe von Euch bin ich wie immer sehr erfreut und danke Euch schon mal im Voraus.
LG, Davicito.
Zuletzt bearbeitet: