Front- oder PageController

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
wal
Beiträge: 10
Registriert: 04.08.2008, 08:26:29

Front- oder PageController

Beitrag von wal » 27.08.2008, 10:01:06

Hallo Dr. e,

nur eine kurze Frage, bevor ich weiter in der Doku lese

Bedeuten solche Sätze, wie z.B.

"Da es mit dem Frontcontroller möglich ist, die Business-Schicht, bzw. das Model der Anwendung vor der Präsentationsschicht zu erzeugen, kann, im Gegensatz zu einer PageController-Implementierung... "

daß entweder der Frontcontroller ODER der Pagecontroller die Seiten erstellt? Oder erstellt der Pagecontroller immer die Seiten, nur bekommt evtl. zusätzlichen input vom Frontcontroller ?
Könntest du bitte ein Beispiel für eine vollständige index.php einer Frontcontroller-Implementierung geben ?

mfG
wal

Benutzeravatar
dr.e.
Administrator
Beiträge: 4525
Registriert: 04.11.2007, 16:13:53

Re: Front- oder PageController

Beitrag von dr.e. » 27.08.2008, 12:34:40

Hallo wal,

Bedeuten solche Sätze, wie z.B.

"Da es mit dem Frontcontroller möglich ist, die Business-Schicht, bzw. das Model der Anwendung vor der Präsentationsschicht zu erzeugen, kann, im Gegensatz zu einer PageController-Implementierung... "

daß entweder der Frontcontroller ODER der Pagecontroller die Seiten erstellt? Oder erstellt der Pagecontroller immer die Seiten, nur bekommt evtl. zusätzlichen input vom Frontcontroller ?

Um er kurz zu machen: nur der PageController sorgt für die Erstellung der Seite, der FrontController ist quasi vorgeschaltet nutzt jedoch den PageController zur Generierung der Seite. Wie du der Doku evtl. entnommen hast, ist der PageController ein "Master-MVC-Controller", der sich um den Aufbau und der Behandlung (Ausführen von DocumentControllern, Transformation) des DOM-Baumes kümmert.

Der Mehrwert, den FrontController zur Auslieferung der Seite zu nutzen besteht darin, dass dieser zuerst die gewünschten Actions ausführt und dann erst die Seite (=Präsentationsschicht) erzeugt. Innerhalb der Actions kannst du dann beispielsweise ein Model-Objekt deiner Anwendung füllen, mit dem die Präsentationsschicht dann bereits arbeiten kann. Bestes Beispiel ist hier die Model-basierte View-Anzeige. Hierzu habe ich ein Tag erstellt, dass an Hand eines Model-Parameters einen definierten View anzeigt. So kannst du - wie bei Nicht-Webanwendungen üblich - die Präsentationsschicht über die Businessschicht steuern.

Weiteres Beispiel für die Nutzung des FrontControllers findest du auf der Seite FrontController-Tutorial. Eigentlich wollte ich auf den Ablauf des FrontControllers auf dieser Seite verweisen, die Grafik wird jedoch nicht ausgeliefert. Ich behebe den Fehler jedoch noch heute Abend, dann wird der Ablauf sicher nochmal klarer.


Könntest du bitte ein Beispiel für eine vollständige index.php einer Frontcontroller-Implementierung geben ?

Gerne. Um den PageController zu nutzen, muss folgendes in der index.php enthalten sein:

Code: Alles auswählen

// PageController einbinden
require_once('/path/to/core/pagecontroller/pagecontroller.php');

// Seite erzeugen
$Page = new Page();

// Template laden
$Page->loadDesign('sites::testwebsite','pres/templates/website');

// Seite transformieren und ausgeben
echo $Page->transform();

Das Beispiel ist aus http://adventure-php-framework.org/Seite/048-Webseite-erstellen, Kapitel 3.2. entnommen. Sollten dir die Parameter unklar sein, meld dich einfach nochmal.

Um die selbe Seite per FrontController ausliefern zu lassen, kannst du folgenden Code verwenden:

Code: Alles auswählen

// PageController einbinden
require_once('/path/to/core/pagecontroller/pagecontroller.php');

// FrontController hinzu laden
import('core::frontcontroller','Frontcontroller');

// FronController-Instanz erzeugen
$fC = &Singleton::getInstance('Frontcontroller');

// Context mitgeben (wird beim PageController automatisch an Hand des ersten Arguments von loadDesign() erledigt)
$fC->set('Context','sites::testwebsite');

// Sprache definieren (im Fall von de kann das auch entfallen, da das die Standard-Sprache ist)
$fC->set('Language','de');

// FrontController starten (=Actions ausführen, Page erzeugen und transformieren)
$fC->start('sites::testwebsite','pres/templates/website');

Wenn du die index.php mit dem eingebundenen FrontController aufrufst, wird diese die identische Ausgabe erzeugen, wie die PageController-index.php. Grund: es sind noch keine Actions definiert. Wie Actions definiert werden, kannst du unter FrontController-Dokumentation oder FrontController-Tutorial nachlesen. Solltest du dazu Fragen haben, dann her damit! :)

Ergänzung: wenn du möchtest, dass bei jedem Aufruf deiner Seite eine Action ausgeführt wird (z.B. für das Prüfen von Login-Informationen), dann muss die Action in der index.php statisch registriert werden. Das kannst du mit Hilfe der Methode registerAction() wie folgt erledigen:

Code: Alles auswählen

// PageController einbinden
require_once('/path/to/core/pagecontroller/pagecontroller.php');

// FrontController hinzu laden
import('core::frontcontroller','Frontcontroller');

// FronController-Instanz erzeugen
$fC = &Singleton::getInstance('Frontcontroller');

// Context mitgeben (wird beim PageController automatisch an Hand des ersten Arguments von loadDesign() erledigt)
$fC->set('Context','sites::testwebsite');

// Sprache definieren (im Fall von de kann das auch entfallen, da das die Standard-Sprache ist)
$fC->set('Language','de');

// Action statisch registrieren
$fC->registerAction('sites::testwebsite::biz','setModel');

// FrontController starten (=Actions ausführen, Page erzeugen und transformieren)
$fC->start('sites::testwebsite','pres/templates/website');

Hiermit würde die Action setModel aus dem Namespace sites::testwebsite::biz bei jedem Aufruf der Seite vom FrontController ausgeführt.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4525
Registriert: 04.11.2007, 16:13:53

Re: Front- oder PageController

Beitrag von dr.e. » 27.08.2008, 16:16:11

Hallo wal,

unter http://adventure-php-framework.org/Seit ... r-Tutorial findest du nun das Timing-Model-Bild, das beschreibt, wie der FrontController agiert und genutzt werden kann.

Solltest du Fragen dazu haben, immer her damit! :)
Viele Grüße,
Christian

wal
Beiträge: 10
Registriert: 04.08.2008, 08:26:29

Re: Front- oder PageController

Beitrag von wal » 28.08.2008, 12:03:43

Hallo dr.e.

danke für die Antwort

wal :D

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast