Your SlideShare is downloading. ×
0
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Agavi (2010-07-31)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Agavi (2010-07-31)

1,398

Published on

Presentation given at Japan PHP User Group meetup

Presentation given at Japan PHP User Group meetup

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,398
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. THE AGAVI FRAMEWORK PHP
  • 2. David Zülke
  • 3. David Zuelke
  • 4. http://en.wikipedia.org/wiki/File:München_Panorama.JPG
  • 5. Founder
  • 6. Lead Developer
  • 7. @dzuelke
  • 8. HISTORY (Won’t Take Long)
  • 9. < 2005
  • 10. Sean Kerr
  • 11. Mojavi 1, 2 & 3
  • 12. 2005
  • 13. Mojavi 3 died
  • 14. forked
  • 15. Mojavi 3
  • 16. Sean Kerr came back, eventually
  • 17. and of course, he chose Agavi over Symfony :)
  • 18. AT A GLANCE Agavi’s Key Features and Approaches
  • 19. 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.
  • 20. 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!
  • 21. 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!
  • 22. 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.
  • 23. 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.
  • 24. 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.
  • 25. 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.
  • 26. 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.
  • 27. 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.
  • 28. 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.
  • 29. 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).
  • 30. 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.
  • 31. 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.
  • 32. I’m terribly sorry you had to endure 12 slides full of bullet points.
  • 33. HANDS-ON Let’s Play With an Agavi Application
  • 34. SOFT SKILLS The Little German Things
  • 35. 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 http://trac.agavi.org/ticket/1019 if you’re interested.
  • 36. 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)
  • 37. 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
  • 38. AGAVI 1.0.4 AND1.1 Release Roadmap
  • 39. 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
  • 40. 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
  • 41. !e End
  • 42. Questions?
  • 43. THANK YOU! This was a presentation by @dzuelke Send me an e-mail! david.zuelke@bitextender.com

×