Grundlagen

Artikel bewerten:
Dieser Artikel wurde noch nicht bewertet. Bewerten Sie diesen Artikel als erstes!

1. Einführung

Das vorliegende Framework versteht sich als Hilfsmittel für die Implementierung von objektorientierten, generischen und wiederverwendbaren PHP-Applikationen. Es werden eine Reihe von wichtigen OO-Design-Pattern implementiert und das Framework bietet Lösungen für bekannte Problemstellungen:
Das Adventure-PHP-Framework unterstützt den Programmierer dabei in allen genannten Design-Modellen. Das Framework versteht sich bewusst als Programmier-Hilfe und nicht als fertige Anwendung, die lediglich konfiguriert werden muss. Das Software-Design kann nur vom Entwickler kommen, das Framework kann den Entwickler nur bei der Implementierung unterstützen!


2. Aufbau und Bedeutung der Ordner-Struktur

Wie in der objektorientierten Welt üblich, sind die Komponenten des Frameworks in einer nach Abhängigkeit und Bedeutung strukturierten Ordnern untergebracht. Hier bei definiert der Ordnername das Paket und der Dateiname den Namen der Klasse. Die relevanten Dateien können innerhalb von Programmteilen mit der Funktion import() eingebunden werden.

In den Release-Paketen sind folgende Ordner-Strukturen enthalten:
apps/ (Verzeichnis alle Quellcode-Dateien)
     [config/ (Verzeichnis für Konfigurationsdateien)]

     core/ (Verzeichnis für die Core-Komponenten)
          benchmark/
          configuration/
          database/
          errorhandler/
          filesystem/
          filter/
          frontcontroller/
          logging/
          pagecontroller/
          service/
          session/
          singleton/

     modules/ (Verzeichnis für die Module)
             comments/
             guestbook/
             kontakt4/
             pager/
             socialbookmark/

     [sites/ (Verzeichnis für Webseitendateien)]

     tools/ (Verzeichnis für die Tools-Komponenten)
           cache/
           datetime/
           form/
                taglib/
           html/
                taglib/
           image/
           link/
           mail/
           string/
           validator/
           variablen/
Die Ordner core und tools beinhalten die Kern-Bestandteile des Frameworks und werden mit jedem Release ausgeliefert. Darin befinden sich u.a. die Implementierung des Page-Controllers (/apps/core/pagecontroller/), des configurationManagers (/apps/core/configuration/) oder Tools wie ein mailSender (/apps/tools/mail/) bzw. der linkHandler (/apps/tools/link/).

Der Ordner modules ist dazu gedacht, auf den core- und tools-Komponenten aufsetzende Module aufzunehmen, die entweder im Release enthalten sind (z.B. Gästebuch, Kontaktformular) oder von Ihnen implementierte Module zum Einsatz in Webseiten oder Web-Applikation.

Unterhalb von config werden Konfigurationsdateien abgelegt, die in den unterschiedlichen Teilen der Software zum Einsatz kommen. Unter Konfigurationsdateien fallen Sprachdateien, Parameterdefinitionen für Applikationen oder auch MySQL-Statement-Dateien.

Da es ein Punkt des Codexes des Frameworks ist möglichst immer wiederverwendbare Code-Teile zu erstellen, wird zwischen den Ordnern modules und sites unterschieden. Der Ordner modules beinhaltet über alle sites hinweg einsetzbare Software-Teile, der Ordner sites die eigentlichen Webseiten-Projekte. Als ein Webseiten-Projekt wird nicht nur eine Ausgabe-Seite angesehen, sondern z.B. auch ein Backend (CMS).

Die API-Dokumentation beschreibt die Inhalte der Ordner nochmals genauer.


3. Aufbau einer einfachen Applikation

Das Framework arbeitet im sogenannten "Postback"-Modus. Das bedeutet, dass ein Webseiten-Projekt in der Regel eine zentrale Datei (meist index.php, da diese im Webserver als DirectoryIndex konfiguriert ist) besitzt und über diese alle Anfragen abgewickelt werden. Ist dieses Verhalten nicht gewünscht, können auch weitere Dateien gemäß ihren Aufgaben definiert werden. Es hat sich jedoch als praktikabel erwiesen, mit einer Bootstrap-Datei zu arbeiten, da sich dadurch der Pflegeaufwand der Code-Dateien minimiert.


3.1. Aufbau einer index.php

Eine einfache Applikation besteht grundsätzlich aus einer Bootstrap-Datei und einem Master-Template. Die Bootstrap-Datei läd das Template, erstellt daraus eine Seite, die anschließend transformiert und ausgegeben wird. Im Master-Template ist definiert, wie die Applikation aufgebaut ist und welche weiteren Templates, TagLibs oder Module inkludert werden.

Eine typische index.php enthält folgende Code-Teile:
   // Page-Controller einbinden
   
include_once('./apps/core/pagecontroller/pagecontroller.php');

   
// Seite erzeugen
   
$Page = new Page('{1}');

   
// Seiten-Struktur aufbauen
   
$Page->loadDesign('{2}','{3}');

   
// Seite transformieren und ausgeben
   
echo $Page->transform(); 
Den mit {x} gekennzeichneten Platzhaltern kommt dabei folgende Bedeutung zu:

3.2. Aufbau des Basis-Templates

Templates spielen im Adventure PHP Framework eine entscheidende Rolle. Abstrakter betrachtet ist dabei Knoten einer Webseite eine kleine MVC-Einheit, die aus einem Model (zumeist dem Model der Applikation oder Webseite), dem View(-Template), einem XML-/HTML-Template, und einem Controller (DocumentController), falls erwünscht, besteht. Den Kern des Frameworks stellt der PageController dar, der aus einem Template einen Objektbaum erzeugt und dafür sorgt, dass bei der Transformation die entsprechenden Controller ausgeführt werden.

Mit der Gestaltung der Templates definiert der Entwickler quasi die Komplexität der Seite und den Aufbau des Objektbaums. In der index.php wird mit der Methode loadDesign() ein initiales Template einer Applikation oder eines Modules geladen, das die oberste Ebene des Aufbaus der Seite definiert. Jedes eingebundene Template bildet dabei einen Kind des aktuellen Baum-Knotens. Die Verschachtelungstiefe ist dabei nicht beschränkt. Die folgende Codebox zeigt ein einfaches Template, das als Layout einer Webseite dienen kann:
<html>
<head>
  <title>Demo</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
...
</body>
</html>
Weiterführende Beispiele zu Templates können den Kapiteln Hallo Welt! und Templates entnommen werden, das Tutorial Webseite erstellen gibt eine weitere Einführung in das Erstellen von Web-Seiten und -Applikationen.


3.3. Basis-Konfiguration

Im Gegensatz zu früheren Versionen (< 1.7) benötigt das Framework zunächst keine weitere Konfiguration. Intern werden jedoch einige Basis-Konfigurationsparameter im Namespace apf::core der Registry verwaltet. Müssen diese für den speziellen Anwendungsfall angepasst werden, so kann das in der Boostrap-Datei wie nachfolgend dargestellt bewerkstelligt werden. Die Registry dient nicht nur als zentraler Informationspool für das Framework, sondern kann auch für die Steuerung von konkreten Anwendungen eingesetzt werden.
   // Page-Controller einbinden
   
include_once('./apps/core/pagecontroller/pagecontroller.php');

   
// Instanz der Registry beziehen
   
$Reg = &Singleton::getInstance('Registry');

   
// Umgebungsvariable manipulieren
   
$Reg->register('apf::core','Environment','MY_ENV');

   
// Basis-Pfad der Applikation manipulieren
   
$Reg->register('apf::core','URLBasePath','http://mybaseurl.de');

   
// URLRewriting-Modus &auml;ndern (true: URL wird mit / dargestellt, false: "normale" URLs)
   
$Reg->register('apf::core','URLRewriting',true);

   
// Log-Verzeichnis anpassen
   
$Reg->register('apf::core','LogDir','/Pfad/zu/meinem/Log/Verzeichnis');

   
// Seite erzeugen
   
$Page = new Page('{1}');

   
// Seiten-Struktur aufbauen
   
$Page->loadDesign('{2}','{3}');

   
// Seite transformieren und ausgeben
   
echo $Page->transform(); 
Die aufgeführten Parameter haben folgende Bedeutung:

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.

«   1   »
Einträge/Seite: | 5 | 10 | 15 | 20 |

1 Christian
06.07.2008, 23:09:45
Hinweis zum letzten Kommentar:
Seit Release 1.7-beta wird das URL-Rewriting über den Registry-Wert "URLRewriting" im Namespace "apf::core" konfiguriert (siehe oben).

2 Markus Köhler
02.09.2007, 13:32:12
Nachtrag zur Konstante APPS__URL_REWRITING:
Diese wird ebenso für den frontcontrollerLinkHandler verwendet um zu unterscheiden, ob dieser im URL-Rewriting-Modus arbeitet, oder nicht.