Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Agavi (ConFoo2010 2010-03-11)

Agavi (ConFoo2010 2010-03-11)

David Zuelke

March 11, 2010
Tweet

More Decks by David Zuelke

Other Decks in Programming

Transcript

  1. NO ASSUMPTIONS • Being PHP based, it works best for

    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.
  2. REUSE CODE • The right things are done in the

    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!
  3. ENVIRONMENTS AND CONTEXTS • An Environment is bootstrapped for every

    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!
  4. MODULES, ACTIONS, VIEWS ETC • An Application has a number

    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.
  5. EXECUTION CONTAINERS • Every Action execution happens in an isolated

    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.
  6. FILTERS • Global Filters or per-Action/Container filters. • Wrap the

    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.
  7. LAYERS AND LAYOUTS • A View can leave instructions on

    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.
  8. ROUTING • Used for matching URLs, SOAP method names. •

    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.
  9. FORM HANDLING • Form Population Filter makes form handling a

    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.
  10. CACHING • Cache the entire execution of a request, or

    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.
  11. VALIDATION • Validates not only request parameters, but also Files,

    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).
  12. CONFIGURATION • Configuration files are XML based. • Leverages the

    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.
  13. INTERNATIONALIZATION • Bundles the Unicode CLDR database with information about

    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.
  14. TICKETS, FEATURES, ROADMAP • Every change has a ticket •

    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.
  15. 1.0.2 (January 27, 2010) ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ CHG: Update timezone database to

    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)
  16. SUPPORT • All classes, methods and properties are fully documented

    • Tutorial manual and FAQs available • Mailing Lists and IRC Channel for user support • Commercial support, training and consulting available through Bitextender
  17. PLANNED FOR AGAVI 1.1 • Storage subsystem • Input types

    for HTTP • Support for HipHop-PHP • Out-of-the-box support for the Windows Azure platform • First beta scheduled for end of April