Agavi (2010-07-31)
Upcoming SlideShare
Loading in...5

Agavi (2010-07-31)



Presentation given at Japan PHP User Group meetup

Presentation given at Japan PHP User Group meetup



Total Views
Views on SlideShare
Embed Views



1 Embed 1 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Agavi (2010-07-31) Agavi (2010-07-31) Presentation Transcript

  • David Zülke
  • David Zuelke
  • Founder
  • Lead Developer
  • @dzuelke
  • HISTORY (Won’t Take Long)
  • < 2005
  • Sean Kerr
  • Mojavi 1, 2 & 3
  • 2005
  • Mojavi 3 died
  • forked
  • Mojavi 3
  • Sean Kerr came back, eventually
  • and of course, he chose Agavi over Symfony :)
  • AT A GLANCE Agavi’s Key Features and Approaches
  • 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.
  • REUSE CODE • Theright 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!
  • ENVIRONMENTS AND CONTEXTS • AnEnvironment 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!
  • MODULES, ACTIONS, VIEWS ETC • An Application has a number of Modules. • EachModule 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.
  • 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.
  • 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.
  • LAYERS AND LAYOUTS • A View can leave instructions on Templates to render; these are called Layers. • EachLayer has access to the output of the previous Layers, and can define Slots - Containers with Actions that are run before rendering, returning the content. • Layerand Slot definitions can be made in a configuration file; the result is a Layout. • All this can be done programmatically, as well.
  • 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. • Routescan also set Output Types, force continuing of execution even though they matched, and much more. • Also very nice for refactoring existing applications.
  • 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.
  • 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. • Alsocaches cookies (with correct lifetime!), HTTP headers that were set etc.
  • VALIDATION not only request parameters, but also Files, • Validates Cookies and HTTP Headers. • Defaultsettings mean you only have access to data you validated. • Drastically reduces the possibility of programmer errors. • Validatorscan have dependencies (“only validate email if checkbox is on”), different severities, handle arrays, normalize values (e.g. make Unix TS from date value).
  • 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.
  • INTERNATIONALIZATION • Bundles the Unicode CLDR database with information about all locales of this world. • Functionsfor 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.) • Partsof the functionality are ports of ICU, IBM’s Java/C library for globalization.
  • I’m terribly sorry you had to endure 12 slides full of bullet points.
  • HANDS-ON Let’s Play With an Agavi Application
  • SOFT SKILLS The Little German Things
  • 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 • Onlyone vulnerability in the history of the project; dealt with properly using MITRE’s CVE list and detailed announcements. Read if you’re interested.
  • 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)
  • 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
  • AGAVI 1.0.4 AND1.1 Release Roadmap
  • AGAVI 1.0.4 • Support for Microsoft Internet Information Services (IIS) 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
  • AGAVI 1.1 • Authorization Layer • Support for HipHop-PHP (already 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
  • !e End
  • Questions?
  • THANK YOU! This was a presentation by @dzuelke Send me an e-mail!