Alloy HMVC PHP Framework
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Alloy HMVC PHP Framework

on

  • 12,327 views

A new Hierarchical MVC framework for PHP 5.3+ with a modular organization and REST-centered architecture. Alloy strikes a balance between well-structured and well designed object-oriented code that ...

A new Hierarchical MVC framework for PHP 5.3+ with a modular organization and REST-centered architecture. Alloy strikes a balance between well-structured and well designed object-oriented code that adheres to the best programming practices and code that is truly simple and enjoyable for programmers who use it on a daily basis.

This talk focuses on introducing Alloy Framework, its philosophies and concepts, why it is Hierarchal MVC and what that means for you as a developer, and showing how easy it is to build an app with both HTML output and a full REST API using a single controller.

Statistics

Views

Total Views
12,327
Views on SlideShare
12,147
Embed Views
180

Actions

Likes
5
Downloads
100
Comments
0

7 Embeds 180

http://www.berejeb.com 150
http://www.redditmedia.com 20
http://feeds.feedburner.com 3
http://www.linkedin.com 3
http://www.techgig.com 2
http://115.112.206.131 1
http://twitter.com 1
More...

Accessibility

Categories

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.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Alloy HMVC PHP Framework Presentation Transcript

  • 1. Alloy Framework PHP 5.3+ Modular Hierarchical MVC http://alloyframework.orgWednesday, March 30, 2011
  • 2. Who am I? Vance Lucas http://vancelucas.com @vlucas Business: http://actridge.com PHP dev since 1999 (PHP 3) I love good OOP code and concepts, but hate the complexity it brings Vance Lucas (@vlucas) http://alloyframework.org 2Wednesday, March 30, 2011
  • 3. A Few Points... Kind of a disclaimer, but not reallyWednesday, March 30, 2011
  • 4. You May NOT Like Alloy If... You are an Object-Oriented Programming Purist You don’t care how complex code is as long as it’s “correct” OOP (because some guy’s book said so) You LOVE using Zend Framework, Symfony, or FLOW3 You LOVE XML and Dependency Injection Containers You are looking for a component library Vance Lucas (@vlucas) http://alloyframework.org 4Wednesday, March 30, 2011
  • 5. You MIGHT Like Alloy If... You think frameworks like Zend, Symfony, or FLOW3 make some things too difficult and cumbersome You don’t think any PHP framework has it quite right You don’t like “too much magic” You want to know what your framework is doing You value ease of use over everything else You want good OOP code that follows known coding standards that is still easy to use and understand Vance Lucas (@vlucas) http://alloyframework.org 5Wednesday, March 30, 2011
  • 6. Philosophy Usefulness, Simplicity and Strong Design Minimum code, maximum impact Use OOP principles and design, but don’t over-do it PHP is not Java with dollar signs Explicitness > “Magic” Easier to understand & see what is going on Design patterns should never trump user experience or get in the way Users over “correctness” Vance Lucas (@vlucas) http://alloyframework.org 6Wednesday, March 30, 2011
  • 7. Alloy Framework Goals Lightweight Modular Organization Hierarchical MVC (HMVC) Easy to understand and use Easy to make REST APIs and HTML pages No config/setup necessary, works anywhere Follow PEAR/Zend Coding Standards Strike a balance between good OOP concepts and ease of use with low learning curve Vance Lucas (@vlucas) http://alloyframework.org 7Wednesday, March 30, 2011
  • 8. Alloy Architecture Inside & OutWednesday, March 30, 2011
  • 9. Alloy Architecture Overview Modular Organization Kernel Plugins Hierarchical MVC (HMVC) Controllers as Resources Events and Filters Vance Lucas (@vlucas) http://alloyframework.org 9Wednesday, March 30, 2011
  • 10. Modular Organization All related files in a single top-level named folder No separate “controllers”, “models” and “views” directories at same level Unlimited levels of nesting Easier distributable packages Vance Lucas (@vlucas) http://alloyframework.org 10Wednesday, March 30, 2011
  • 11. Kernel Core object available from anywhere in your app Kernel() - only global-scope function in Alloy Multiple uses: Config access Lazy-loading Factory / Service Locator Extension Point for Modules and Plugins Sole Dependency Vance Lucas (@vlucas) http://alloyframework.org 11Wednesday, March 30, 2011
  • 12. Kernel - Config Access Getter Setter Vance Lucas (@vlucas) http://alloyframework.org 12Wednesday, March 30, 2011
  • 13. Kernel - Lazy-Load Factory Write This: Not That: Or This: Vance Lucas (@vlucas) http://alloyframework.org 13Wednesday, March 30, 2011
  • 14. Kernel - Extension Point Proxies to callbacks added at runtime via __call Enables all kinds of custom functionality Factory methods for loading & using 3rd party libs Exposing plugin methods for global use Helper or utility methods Vance Lucas (@vlucas) http://alloyframework.org 14Wednesday, March 30, 2011
  • 15. Plugins The primary way of extending AlloyWednesday, March 30, 2011
  • 16. Plugin - Symfony2 Finder File: app/Plugin/Finder/Plugin.php Libs: app/Plugin/Finder/lib/Symfony/Component/ ... Add finder method to Kernel for use Vance Lucas (@vlucas) http://alloyframework.org 16Wednesday, March 30, 2011
  • 17. Plugin - Add to Config File: app/config/app.php Vance Lucas (@vlucas) http://alloyframework.org 17Wednesday, March 30, 2011
  • 18. Plugin - Usage Use finder method on Kernel instance Vance Lucas (@vlucas) http://alloyframework.org 18Wednesday, March 30, 2011
  • 19. Hierarchical MVC Solves the “widget problem”Wednesday, March 30, 2011
  • 20. Hierarchical MVC Multiple MVC dispatches to fulfill a single request Solves the “widget problem” Sidebar content can be self-contained module Ads, tag clouds, blog headlines, etc. Encourages module re-use & helps DRY Not strictly “hierarchical” - more like nested Hierarchy is not tracked or enforced in any way Vance Lucas (@vlucas) http://alloyframework.org 20Wednesday, March 30, 2011
  • 21. Vance Lucas (@vlucas) http://alloyframework.org 21Wednesday, March 30, 2011
  • 22. Vance Lucas (@vlucas) http://alloyframework.org 22Wednesday, March 30, 2011
  • 23. Controllers Respond to both internal and external requestsWednesday, March 30, 2011
  • 24. Controllers Part of the Module package that handles requests Special name “scope” for web-accessible actions GET = <action>Action POST, PUT, DELETE, etc = <action>Method Ensures HTTP methods are required for access AlloyRequest object is first parameter All named params from route set on Request object Vance Lucas (@vlucas) http://alloyframework.org 24Wednesday, March 30, 2011
  • 25. Controllers (cont’d) NOTHING is automatically or implicitly loaded No views, models, or anything else Explicitly return response or content to send Controllers are not factories Controllers are extremely lightweight Controllers do not hold the context of their requests Vance Lucas (@vlucas) http://alloyframework.org 25Wednesday, March 30, 2011
  • 26. Example REST Controller Notice <name>Action vs <name>Method Vance Lucas (@vlucas) http://alloyframework.org 26Wednesday, March 30, 2011
  • 27. Controller Response Types Sending output and manipulating control flowWednesday, March 30, 2011
  • 28. Simple Strings Sends 200 OK status with string content as body Vance Lucas (@vlucas) http://alloyframework.org 28Wednesday, March 30, 2011
  • 29. Any object with __toString Sends 200 OK status with string content as body Vance Lucas (@vlucas) http://alloyframework.org 29Wednesday, March 30, 2011
  • 30. View Templates Most common Module response type Returns object - template not yet rendered Vance Lucas (@vlucas) http://alloyframework.org 30Wednesday, March 30, 2011
  • 31. Resource Objects Auto-converts array to JSON or XML for API response Accepts objects with toArray methods Vance Lucas (@vlucas) http://alloyframework.org 31Wednesday, March 30, 2011
  • 32. Generic Response Body + HTTP Status Base AlloyModuleResponse that view templates and resources extend from Can set custom layout, errors, headers, etc. using a fluent interface just like templates and resources Vance Lucas (@vlucas) http://alloyframework.org 32Wednesday, March 30, 2011
  • 33. Boolean False Generic 404 (Throws AlloyExceptionFileNotFound) Plugins can filter on ‘dispatch_exception’ event to produce a custom global response Vance Lucas (@vlucas) http://alloyframework.org 33Wednesday, March 30, 2011
  • 34. Why Explicit Returns? Easier to manipulate responses and control flowWednesday, March 30, 2011
  • 35. Easier to re-use Actions Re-use form template from ‘newAction’ No forwarding or other indirection necessary Object return lets you modify it further before display through fluent interface Vance Lucas (@vlucas) http://alloyframework.org 35Wednesday, March 30, 2011
  • 36. Modify Dispatches at Will Template object returned is not yet rendered so we can modify it at will Change path to a local template Change layout Add errors Change response code or headers, etc. Very flexible Vance Lucas (@vlucas) http://alloyframework.org 36Wednesday, March 30, 2011
  • 37. ... Even pull out values Since the template is not yet rendered, we can even pull out values that have been set and re-use them however we want to We don’t even have to render the dispatch result at all No wasted resources Vance Lucas (@vlucas) http://alloyframework.org 37Wednesday, March 30, 2011
  • 38. URL Routing Simple named parameters, full controlWednesday, March 30, 2011
  • 39. Parameter Types <:alpha> Matches [a-zA-Z0-9_-+%s]+ <#numeric> Matches [0-9]+ <*wildcard> Marches .* Does NOT split the URL by “segment” Vance Lucas (@vlucas) http://alloyframework.org 39Wednesday, March 30, 2011
  • 40. Some Default Routes Fluent interface allows route modification REST verb params will override defaults and matches POST /module/add => Module::postMethod Vance Lucas (@vlucas) http://alloyframework.org 40Wednesday, March 30, 2011
  • 41. Custom Routes Can be literally anything URL does not have to map <controller>/<action> Example from Autoridge.com /<#year>/<:make>/<:model> Vance Lucas (@vlucas) http://alloyframework.org 41Wednesday, March 30, 2011
  • 42. Static Routes Map arbitrary static path to Module::action No PREG matching overhead Path can include slashes and be as long as necessary Router does not split URL into segments Vance Lucas (@vlucas) http://alloyframework.org 42Wednesday, March 30, 2011
  • 43. Making an App HTML + JSON API, single Controller methodWednesday, March 30, 2011
  • 44. app/Module/Blog/Post.php Using Spot ORM (Ships with Alloy, but NOT required) Spot provided with a plugin, not tied to Alloy in any way Vance Lucas (@vlucas) http://alloyframework.org 44Wednesday, March 30, 2011
  • 45. Blog Example app/Module/Blog/Controller.php Vance Lucas (@vlucas) http://alloyframework.org 45Wednesday, March 30, 2011
  • 46. app/Module/Blog/views/index.html.php Vance Lucas (@vlucas) http://alloyframework.org 46Wednesday, March 30, 2011
  • 47. http://localhost/path/blog Vance Lucas (@vlucas) http://alloyframework.org 47Wednesday, March 30, 2011
  • 48. Magic Datagrid? Alloy has View Generics Extensions of view templates Generic HTML template markup with custom functions that accept Closures to enable fully custom PHP markup in designated areas (like table cells) with no special syntax or recursive includes You don’t have to use them, but they can be huge time-savers if you do Vance Lucas (@vlucas) http://alloyframework.org 48Wednesday, March 30, 2011
  • 49. Adding an API Template for HTML, Resource object for API Vance Lucas (@vlucas) http://alloyframework.org 49Wednesday, March 30, 2011
  • 50. http://localhost/path/blog/index.json Array -> JSON via Resource response type Vance Lucas (@vlucas) http://alloyframework.org 50Wednesday, March 30, 2011
  • 51. API Errors? Vance Lucas (@vlucas) http://alloyframework.org 51Wednesday, March 30, 2011
  • 52. HTML JSON Vance Lucas (@vlucas) http://alloyframework.org 52Wednesday, March 30, 2011
  • 53. Layouts & Blocks Make your App Look NiceWednesday, March 30, 2011
  • 54. Layouts Really just another view template with a special location Includes both header & footer, content placed inside Vance Lucas (@vlucas) http://alloyframework.org 54Wednesday, March 30, 2011
  • 55. Blocks Named regions that content can be pushed to from any view template in your app Static to current request so no data has to be passed Vance Lucas (@vlucas) http://alloyframework.org 55Wednesday, March 30, 2011
  • 56. app/layouts/app.html.php Vance Lucas (@vlucas) http://alloyframework.org 56Wednesday, March 30, 2011
  • 57. app/Module/Blog/views/viewAction.html.php Post tag list in layout sidebar Vance Lucas (@vlucas) http://alloyframework.org 57Wednesday, March 30, 2011
  • 58. app/Module/Blog/views/viewAction.html.php HMVC dispatches as “widgetized” content Promotes better code re-use, DRY principle, allows polymorphic associations for generic types of content Vance Lucas (@vlucas) http://alloyframework.org 58Wednesday, March 30, 2011
  • 59. Events & Filters Dynamic Behavior & Manipulating ResponsesWednesday, March 30, 2011
  • 60. Layout Plugin Layout wrapping is achieved with a plugin in Alloy Filters ‘dispatch_content’ event Vance Lucas (@vlucas) http://alloyframework.org 60Wednesday, March 30, 2011
  • 61. Main Dispatch Content Filter Many other events and filters not shown in this diagram Vance Lucas (@vlucas) http://alloyframework.org 61Wednesday, March 30, 2011
  • 62. Layout Plugin - wrapLayout Returns template wrapped in template Vance Lucas (@vlucas) http://alloyframework.org 62Wednesday, March 30, 2011
  • 63. Thanks! Alloy on the web: http://alloyframework.org http://github.com/alloyphp Vance Lucas Personal: http://vancelucas.com Business: http://actridge.com Vance Lucas (@vlucas) http://alloyframework.org 63Wednesday, March 30, 2011