websites and other HTTP- based stuff, but you can use it to write any app. • No requirements for specific template engines, DBMSes, ORMs, client side JS libraries etc. • Abstraction of HTTP request method verbs, output types, response implementations etc. • Form Handling is independent of libraries or template engines.
right places, and the framework prevents common mistakes. • Exposing Actions of a web application through a SOAP web service API etc. can be done in minutes. • Want an RSS feed of your latest products? It’s just a new output type away. • Want to return JSON for Ajax features? Have it done when a JS framework sends the right request headers!
box or developer. Could be “production”, or “dev-joecool” etc. • A Context represents a way of accessing the application, like “web”, “soap” or “console”. • Any configuration can be specific to one or more Environment(s) and/or Context(s). → no more copying and overwriting of DB configs!
of Modules. • Each Module has Actions with corresponding Views and Templates, as well as various configuration files that control caching, validation and so on. • Actions, which can also be nested into folders, contain application logic, make calls to Models, and have one or more Views (“Error”, “Success”, “Input” etc.) • Views handle presentation, usually using Templates.
Container. • Every container has it’s own request data, response, filters etc. • A normal execution does not affect the “outside world”. • Internal forwarding can be done by returning a new Container from a View.
execution, and call the next Filter in the chain - like an Onion or a Russian Nested Doll. • Features like Security or Form Handling are implemented using Filters inside Agavi. • Flow can be redirected internally, response info can be modified etc; numerous possibilities.
Templates to render; these are called Layers. • Each Layer has access to the output of the previous Layers, and can define Slots - Containers with Actions that are run before rendering, returning the content. • Layer and Slot definitions can be made in a configuration file; the result is a Layout. • All this can be done programmatically, as well.
Every route can have children. • Callbacks can control and modify behavior on matching or when generating URLs. • Routes can also set Output Types, force continuing of execution even though they matched, and much more. • Also very nice for refactoring existing applications.
breeze. • Can pre-populate forms using given values. • Re-populates a form when an error occurred. • Highlights erroneous fields and labels. • Can insert error messages into the document. • All without a single line of code in templates.
just parts. • Action-based, so a Slot that runs can be cached, too. • Output can be cached on a per-layer basis, so that the outer master template always runs even when cached. • Also caches cookies (with correct lifetime!), HTTP headers that were set etc.
Cookies and HTTP Headers. • Default settings mean you only have access to data you validated. • Drastically reduces the possibility of programmer errors. • Validators can have dependencies (“only validate email if checkbox is on”), different severities, handle arrays, normalize values (e.g. make Unix TS from date value).
entire XML ecosystem, for instance: • XML Schema, RELAX NG and Schematron validation • XSLT for transformations and backward compatibility • XIncludes for re-use of common settings • Essential for structured code without workarounds and hacks.
all locales of this world. • Functions for translating text, formatting and parsing dates, numbers and currency values, calendar and timezone operations, locale information (e.g. list of all countries in Japanese language etc.) • Parts of the functionality are ports of ICU, IBM’s Java/C library for globalization.
Milestones are public • Impeccable Changelogs and detailed Release Notes • Standards process for big changes, modeled after Python PEPs • Only one vulnerability in the history of the project; dealt with properly using MITRE’s CVE list and detailed announcements. Read http://trac.agavi.org/ticket/1019 if you’re interested.
2010b (#1219) (David) CHG: Update ISO Schematron to version 2010-‐01-‐25 (#1217) (David) FIX: Build system is incompatible with Phing 2.4.0 (#1216) (David) FIX: Form Population Filter doesn't filter out empty error messages (#1214) (David) 1.0.2 RC4 (January 19, 2010) -‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐ ADD: Support for HTML 5 forms (#1213) (David) ADD: Support for Doctrine 1.2 (#1210) (David) ADD: Include error type and code when reporting libxml errors (#1202) (David) CHG: Update timezone database to 2009u (#1207) (David) CHG: Move error suppression operator for XML validation calls to wrapper methods (#1201) (David) FIX: ICU Bug 6814 (#1211) (David) FIX: AgaviTimeZoneDataParser doesn't support "-‐" as a time value (#1208) (David) FIX: Several method existence checks don't deal with visibility (#1205) (David) FIX: Configuration parameter whitespace handling is inconsistent (#1203) (David) FIX: Regression: single Propel init query is lost during initialization (#1194) (David) FIX: Regression: support for Propel 1.3 is broken (#1195) (David) 1.0.2 RC3 (December 8, 2009) -‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐ ADD: Support for Propel 1.4 (#1181) (David) CHG: Use printf rather than echo in bin/agavi (#1191) (David) CHG: Update to PHPUnit 3.4.3 (#1184) (David) CHG: Update timezone database to 2009s (#1188) (David) CHG: Make HTTP Content-‐Type response header charset detection in AgaviFormPopulationFilter more robust (#1187) (David) FIX: Validation drops first element in multi-‐dimensional array exports (#1189) (Dominik) FIX: AgaviToolkit::literalize incorrectly returns null for certain input values (#1190) (David) FIX: HTML meta tag charset detection in AgaviFormPopulationFilter never matches strings without quotation marks (#1185) (David) FIX: FormPopulationFilter raises warning with old PCRE versions (#1183) (David) FIX: AgaviWebResponse throws notice if "http_headers" parameter is not an array (#1186) (David) FIX: Duplicate error message if agavi console script cannot determine Phing version (#1180) (David)
• Tutorial manual and FAQs available • Mailing Lists and IRC Channel for user support • Commercial support, training and consulting available through Bitextender
7 (with rewrites) and ext/sqlsrv • Support for Windows Azure Platform • New XSLT Renderer, takes previous content or returned value from view as the document, then transforms it • Great for displaying return values from XML HTTP APIs! • Exception pages support PHP 5.3 exception linking
works, but needs tweaking) • More support for Windows Azure platform (deployment) • Hopefully: Storage subsystem with unified interface • Maybe: Input types for HTTP • First beta should be out in September