# Agavi

Agavi ist ein freies Webframework. Es ist objektorientiert in PHP 5 implementiert und gemäß dem Architekturmuster Model View Controller aufgebaut.

## Geschichte

Ähnlich wie Symfony basiert Agavi ursprünglich auf der nie veröffentlichten Version 3 des einst populären PHP-Frameworks Mojavi, das vom US-Amerikaner Sean Kerr in Eigenregie entwickelt und schließlich eingestellt wurde.
Gegründet wurde das Projekt Anfang Mai 2005, als ein Team von Software-Entwicklern in Keller (Texas) aus Unzufriedenheit mit dem trotz der Open-Source-Lizenz geschlossenen und unklaren Entwicklungsprozess einen Abspaltung des PHP-Frameworks Mojavi starteten, mit dem Vorsatz, unter Einbeziehung der Community und mit einer offengelegten Roadmap ein Framework als Gemeinschaftsprojekt zu entwickeln.
Seit Anfang 2006 sind die ursprünglichen Gründer des Projekts aus Zeitmangel nicht mehr von der Partie; Agavi wird seitdem von einem internationalen Team unter Federführung eines Unternehmens aus München weiterentwickelt.

## Philosophie und Besonderheiten

Im Vergleich zu anderen Frameworks beschränkt sich Agavi auf die Aufgaben, die klassischerweise in die Problemdomäne eines Frameworks fallen, und überlässt zum Beispiel die Objektrelationale Abbildung darauf spezialisierten Projekten. Dadurch soll ein Vendor Lock-In vermieden werden, bei dem bestimmte Funktionalitäten des Frameworks nur beim Einsatz eines bestimmten ORMs, einer bestimmten Template-Engine usw. einsetzbar wären.
Das Hauptaugenmerk liegt auf sauberem Code-Aufbau in den Applikationen unter strikter Trennung von Verantwortlichkeiten. Im Gegensatz zu vergleichbaren Web-Frameworks ist es mit Agavi in der Praxis tatsächlich möglich, den gleichen Code ohne Änderungen an bestehender Struktur und Logik auch unter anderen Bedingungen zu verwenden und so beispielsweise in einer bestehenden Web-Anwendung eine Webservice-Schnittstelle nachzurüsten, so wie es die MVC-Architektur eigentlich vorsieht. Der anfängliche Aufwand für die Erstellung einer Software ist dabei jedoch höher als mit anderen Frameworks, die sich darauf spezialisiert haben, Entwicklern bei der Erzielung schneller Ergebnisse zu unterstützen. Agavi enthält standardmäßig beispielsweise auch keine Unterstützung für Scaffolding (letztlich eine Konsequenz aus der Entscheidung, kein ORM mitzuliefern).
Eine Agavi-Applikation kann beliebige Umgebungen (z. B. für Produktion, Staging, Entwicklungsumgebung einzelner Programmierer) und Kontexte (z. B. Web, Kommandozeile, SOAP) definieren und darin ablaufen. Konfigurationsoptionen können dabei für beliebige Kombinationen von Umgebungen und Kontexten gesetzt werden, so dass beispielsweise die besonderen Request-Datenquellen beim Betrieb hinter einem Load Balancer für die Produktionsumgebung separat festlegbar sind, oder jeder Entwickler seine eigene Datenbank-Konfiguration hinterlegen kann, ohne andere Einstellungen zu überschreiben. Dadurch vereinfacht sich das Deployment einer Applikation erheblich.
Eine weitere Besonderheit ist der starke Fokus auf XML für die Konfiguration, der beispielsweise über Standardtechnologien wie XIncludes und XSLT eine einfache Modularisierung gestattet, oder Konfigurationsformate über XML-Namensräume versioniert werden, um Rückwärtskompatibilität sicherzustellen. Ebenfalls unterstützt werden XML Schema, RELAX NG und Schematron für die Validierung.

## Merkmale

* Kompatibel mit PHP5
* Konfiguration über XML
* Unterstützung für alle gängigen Datenbank-Abstraktionsschnittstellen und ORMs
* Routing inklusive Rückwärtsgenerierung, nicht auf URLs beschränkt
* Flexible Seitengestaltung mit beliebig vielen geschachtelten Vorlagen
* Unterstützung für beliebige Template-Engines
* Formularbehandlung (Fehlermarkierung, Fehlermeldungen, Befüllen von Formularen) unabhängig von der verwendeten Template-Engine
* Mehrsprachigkeit und I18N-Unterstützung
* Validierung für alle Eingabedaten (z. B. auch HTTP-Header, Cookies, Hochladen von Dateien)
* Flexibles Caching auch von Teilen einer Seite
* Keine mitgelieferten HTML-„Helper“, keine Bindung an ein ORM, keine Javascript-Bibliothek o. ä.

## Rezeption

* Web-Programmierung. In: iX – Magazin für professionelle Informationstechnik. Nr. 5, 2009, S. 40.