User:Nforbes/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 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.

Agavi main focus lies on cleanly structured application code with a strict separation of responsibilities. It does so by reusing code under different circumstances without modifications to structure and logic. e.g. for instance, to modify a web service interface to an existing web application, traditionally you would use MVC paradigm. However, the initial effort required for creating software using Agavi is slightly bigger by eliminating out-of-the-box support e.g. 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.

Features

 * XML-based configuration
 * support all common Database abstraction layers, Object-relational mapping tools, Template Engine
 * Routing including generating of routes; not limited to URLs
 * 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)

Flexibility
 * PHP 5 compatible
 * caching parts of a page
 * layouts using nested templates and widget components ("Slots")

Disadvantages
 * doesn't support a Javascript library, bundled HTML "helpers", coupling to a particular ORM

Similar projects

 * Zend Framework
 * Symfony
 * CakePHP