Agavi

Agavi is an open source Web application framework for PHP 5. Its object oriented implementation follows the Model-View-Controller pattern.

History
Like Symfony, Agavi is based on the never-released third version of the once well-known and popular PHP framework Mojavi developed by Sean Kerr.

The project was created in May 2005 when a team of software engineers from Keller, Texas created it as a fork of Mojavi. It was created in reaction to Mojavi's development model, which was a closed process without a public roadmap and did not involve the participation of a large community. The goal was to change the development of the project to a more open model to encourage collaboration.

Since 2006, Agavi has been maintained largely by Bitextender GmbH, a German software development company. The project's original developers are now involved in the Ruby community.

Philosophy and characteristics


Unlike many other application frameworks, Agavi attempts to limit itself to tasks that traditionally lie in the problem domain of this type of framework, and leaves specializable components to specific libraries. This is supposed to prevent Vendor lock-in.

The main focus lies on cleanly structured application code with a strict separation of responsibilities. Unlike in other frameworks, Agavi actually makes it possible to reuse code under different circumstances without modifications to structure and logic; for instance, it would be possible to retrofit a web service interface to an existing web application, as it is originally intended by the MVC paradigm. However, the initial effort required for creating software using Agavi is slightly bigger than when using other frameworks that specialize in helping developers achieve quick results. For example, Agavi has no out-of-the-box support for Scaffolding (which ultimately is a consequence of the decision not to bundle an ORM).

An application written using Agavi may declare arbitrary Environments (e.g. for production, staging, developer machines) and Contexts (e.g. Web, Command Line, SOAP) and then utilize them at runtime. Configuration settings can be specific to any combination of Environments and Contexts, so that it becomes possible to configure database connection information separately for each developer without them overwriting each other's settings, or to define different request information data sources for a production environment that has servers running behind a load balancer. This reduces the overhead of collaboration in teams, and also drastically simplifies the deployment of applications.

Another distinctive aspect is the strong focus on XML for configuration, which allows for easy modularization and reuse of config files using standard technologies such as XInclude or XSLT. Configuration files are versioned using XML Namespaces (which are also used to maintain backwards compatibility with earlier versions) and may be validated against XML Schema, RELAX NG or Schematron schemas.

Distinctive features


* PHP5 compatible
* XML-based configuration
* Support for all common Database abstraction layers and Object-relational mapping tools
* Routing including generating of routes; not limited to URLs
* Flexible layouts using any number of nested templates and widget components ("Slots")
* Support for any Template Engine
* Form handling (error highlighting, (re-)filling of forms, insertion of error messages) independent of the template engine used
* Internationalization and localization
* Validation of all input data (including, for instance, HTTP headers, cookies and file uploads)
* Flexible caching even of just parts of a page
* No bundled HTML "helpers", no coupling to a particular ORM, a particular Javascript library etc.
 
< Prev   Next >