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

Agavi (PHPJPUG 2010-07-31)

Agavi (PHPJPUG 2010-07-31)

Presentation given at the Japan PHP User Group July 2010 meeting in Tokyo, Japan.

David Zuelke

July 31, 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. 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
  18. 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