Ein Framework für alle Fälle: Seagull
Das seit 2001 von Demian Turner und einer internationalen Community entwickelte Seagull PHP-Framework ist eines dieser Baukästen. Es eignet sich zwar auch dafür, kleine Webseiten mit dem mitgelieferten CMS abzubilden, sein ganzes Können spielt es aber erst bei größeren Projekten aus.
Aufbau
Seagull ist ein objektorientiertes Framework, das verschiedene Patterns wie MVC oder Validate/Process/Display geschickt miteinander verbindet. Es läuft sowohl unter PHP4 als auch unter PHP5 und kann mit verschiedenen Datenbanken wie MySQL, PostgresSQL und Oracle zusammenarbeiten.
Das Framework basiert auf bekannten und hochqualitativen Komponenten von PEAR. Einzelne PEAR-Module können per Weboberfläche von PEAR oder pearified [1] nachinstalliert werden.
Ständig benötigte Funktionen werden in eigenen Klassen mit dem Präfix „SGL_“ gekapselt. So kümmert sich die Klasse „SGL_DB“ um die Datenbankverbindung und stellt auch Funktionen für den komfortablen Aufruf der Klasse „PEAR::Pager“ zur Verfügung.
Teile der Applikation werden wiederum in Modulen geordnet. Diese bestehen aus Managerklassen, Datenbankschematas, Templates und Sprachdateien für die Übersetzung der Benutzerschnittstelle. Bei der einfachen Erstellung des Gerüsts für ein neues Modul oder einer Klasse hilft der integrierte Modulgenerator. Als Templatesystem kommt Flexy [2] zum Einsatz. Bei Bedarf ist es auch möglich, andere Templateengines wie Smarty oder Savant problemlos einzubinden. Je nach Modul kann dabei HTML, XML und jedes andere Format ausgegeben werden.
Alles klar?
Ein Framework soll den Entwickler bei der Arbeit unterstützen. Deshalb wird bei Seagull großer Wert auf die klare und saubere Struktur des Codes gelegt. Der komplette Quelltext entspricht den PEAR Coding Standards [3].
Durch intelligente Verwendung verschiedener Programmierpatterns wie Strategy oder Observer sind die mitgelieferten Module ohne Änderungen im Code schon sehr flexibel. So können frisch registrierte Benutzer bei Bedarf auch automatisch bei einer FUDforum- oder Gallery2-Installation angemeldet werden.
Wer auf Testdriven Development nicht verzichten will, kann den Modulen auch Tests hinzufügen und nach Änderungen im Code vom TestRunner anzeigen lassen, ob noch alles wie geplant funktioniert.
Bereit für große Aufgaben
Das Seagull PHP-Framework bringt alle wichtigen Bausteine für anspruchsvolle Anwendungen mit. Für schnell geladene Webseiten sorgt das integrierte Caching auf Basis von „PEAR::Cache_Lite“.
Natürlich ist man nicht nur auf die HTML-Ausgabe beschränkt, auch andere Schnittstellen wie SOAP lassen sich leicht integrieren. Und mit dem Framework programmierte Wartungsjobs können über die Kommandozeile bequem und automatisch per cron erledigt werden.
Web 2.0 ist in aller Munde, und so ist es auch wichtig, dass AJAX ohne großen Aufwand integriert werden kann. Das Seagull-Framework liefert zum Beispiel Scriptaculous und die bekannte Prototype-Bibliothek standardmäßig mit, aber es kann jede beliebige AJAX-Bibliothek wie dojo oder PEAR::HTML_AJAX eingebunden werden. Um die Bibliothek des Vertrauens zu benutzen, muss man lediglich in der Display-Methode des Managers mit folgendem Aufruf dem Output-Objekt den Pfad und den Dateinamen zur Bibliothek übergeben:
$output->addJavascriptFile('js/scriptaculous/lib/prototype.js');
Listing 1
Das Modul, das AJAX nutzen soll, erhält eine AjaxProvider-Klasse, die für den Datenaustausch zuständig ist:
require_once SGL_CORE_DIR . '/AjaxProvider.php'; class FooAjaxProvider extends SGL_AjaxProvider { /** * Constructor */ function FooAjaxProvider() { SGL::logMessage(null, PEAR_LOG_DEBUG); parent::SGL_AjaxProvider(); } }
Listing 2
In dieser Klasse muss jetzt noch die Funktionalität implementiert werden:
function fooBar() { $this->responseFormat = SGL_RESPONSEFORMAT_HTML; return 'foo'; }
Listing 3
Hier wird als erstes das Rückgabeformat definiert. Bei der Verarbeitung der AJAX-Antwort wird der passende Header gesendet und die JSON-Antwort automatisch kodiert.
Um jetzt eine AJAX-Funktion asynchron auszuführen, muss der folgende JavaScript-Aufruf im Template erfolgen:
new Ajax.Request( makeUrl({module: "foo", action: "fooBar"}), {options} );
Listing 4
Mehr Informationen gibt es in der Onlinedokumentation [4].
Fazit
Wie jede Software ist auch Seagull nicht perfekt. So sind manche Module noch nicht für mehrsprachige Seiten geeignet und die Dokumentation ist nur auf Englisch verfügbar. Die Liste der verfügbaren Module und Erweiterungen ist auch noch relativ kurz. Wer jedoch mit diesen Einschränkungen leben kann, bekommt dafür ein stabiles und vor allem flexibles Framework für alle Lebenslagen an die Hand – von der einfachen Kundenwebsite bis hin zur großen Applikation.
Technische Anforderungen |
|
Showcases |
|