Extending Zend_Tool


Published on

Extending Zend_Tool

Published in: Technology, Education
1 Comment
No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • Extending Zend_Tool

    1. 1. Extending Zend_Tool By Ralph Schindler - Software Engineer
    2. 2. Who is this guy? •Ralph Schindler PHP’er since 1998-ish, 3.0 days Software Engineer Zend Framework team since Jan 2008 New Orleans born, currently reside in Austin, TX •Me on the interwebs: IRC: •Freenode - ralphschindler •EFNet - ralphschi / ralphs ralph.schindler@zend.com http://twitter.com/ralphschindler http://ralphschindler.com http://slideshare.com/ralphschindler Me 2
    3. 3. What’s Zend_Tool All About, Again? A quick review of where Zend_Tool came from, and where its going. 3
    4. 4. Why Zend_Tool? •Rapid application development of ZF projects •Tooling framework Framework for building repeatable tooling tasks Lots of Built in Features Easily extensible (what this talk is about!) •B/c build systems only get us so far •Tools need to fit in human workflows: Tool creates project Human edits project Tool edits project Human edits project ... so on and so on ... What’s Zend_Tool All About Again? 4
    5. 5. When Zend_Tool? •Zend_Tool in ZF 1.8 •Zend_Application in 1.8 •Built in project providers: create projects create controllers create actions create views create modules •Zend_Reflection & Zend_CodeGenerator in 1.8 What’s Zend_Tool All About Again? 5
    6. 6. Future Zend_Tool? •New features in 1.10 New base loader (no more include_path scanning) Providers •Custom project profiles •Client storage & configuration values •DbAdapter configuration •DbTable creation based on database tables – Scanning of tables from database to create code •Layout enabling and creation (Web client interface?) What’s Zend_Tool All About Again? 6
    7. 7. System Overview Let’s have a stroll through the Zend_Tool architecture 7
    8. 8. The Components •Two main “components” Zend_Tool_Framework •The component responsible for dispatching tooling requests Zend_Tool_Project •The component responsible for exposing the “project specific” tooling capabilities •Auxiliary Components Zend_Reflection Zend_CodeGenerator System Overview 8
    9. 9. Zend_Tool_Framework •Dispatch style framework, designed to abstract enough system internals to make extensibility easy “Flexibility of the tooling dispatch over speed of tooling dispatch” •Broken down into logical sub-parts: Client Client storage & configuration Loader Provider & Provider Repository Manifest, Manifest Repository & Metadata System (Built-in) Providers System Overview 9
    10. 10. Zend_Tool_Framework_Client •Responsibilities: Request object Response object Interactivity support Setting up the system registry containing all required objects The actual dispatch()-ing •First implementation Zend_Tool_Framework_Client_Console System Overview 10
    11. 11. Zend_Tool_Framework Config & Storage •Zend_Tool_Framework_Client_Storage •Zend_Tool_Framework_Client_Config Responsibilities: •Allowing clients to specify configuration values for the system and providers to use •Allowing clients to store artifacts on the filesystem that the system and providers can consume – Custom profile files – Provider specific file formats and metadata System Overview 11
    12. 12. Zend_Tool_Framework_Loader •Responsibilities: Load files provided Search for classes defined that implement: •Zend_Tool_Framework_Manifest_Interface •Zend_Tool_Framework_Provider_Interface •Original loader Zend_Tool_Framework_Loader_IncludePathLoader •New loader Zend_Tool_Framework_Loader_BasicLoader Loads explicitly what it was asked to load System Overview 12
    13. 13. Zend_Tool_Framework_Provider •Zend_Tool_Framework_Provider •Zend_Tool_Framework_Provider_Registry •Responsibilities: An interface for defining via a class, dispatch-able actions and “specialties” •(Similar to how Action Controllers define actions) Registry to maintain instances of all providers available Parsing of provider classes for dispatch-able “signatures” System Overview 13
    14. 14. Zend_Tool_Framework Manifest & Metadata •Zend_Tool_Framework_Manifest & Manifest Repository Responsibilities: •Manifest can supply a collection of providers, actions and/or metadata •Registry provides a way to search for metadata in the manifest •Zend_Tool_Framework_Metadata Responsibilities: •Primary use case is to attach “data about data” to instance of a specific client, a specific provider, or action – ex: alternate names for each provider based on the command line naming scheme, OR short names (p for profile) System Overview 14
    15. 15. Zend_Tool_Project •Problem: How to successfully model all the notions of a “project”? •What is a “project”? It is a tree of resources (some filesystem / some not) For each resource we need to capturing it’s “nature” or “context” •2 main elements Zend_Tool_Project_Profile which is a tree of Zend_Tool_Project_Profile_Resources Zend_Tool_Project_Context System Overview 15
    16. 16. Zend_Tool_Project Profile & Resources •Zend_Tool_Project_Profile Responsibilities: •loading, parsing, serializing and storing a profile file •Top most node in a “resource tree” •Zend_Tool_Project_Profile_Resource Responsibilities: •The class most responsible for the “where” question of project modeling •The class most responsible for implementing a node in a “resource tree” •Extends Resource_Container which is a RecursiveIterator (tree fundamentals) •Can create new Resources at specific locations •Can find resources by name and attribute sets •Each contains a Zend_Tool_Project_Context object System Overview 16
    17. 17. Zend_Tool_Project_Context •Responsibilities The class most responsible for the “what” part of project modeling Each resource has a context object •(This is known as “composition”) Example contexts: •Controller file •View script directory •View script file •Model file •Action method •... System Overview 17
    18. 18. Building & Extending for Zend_Tool With so many extension points, where does one start? 18
    19. 19. Where Should One Start? •Path of least resistance when learning to extend: Implement a provider, and be able to call it Implement a manifest for the provider, and be able to call it Implement some metadata about provider, and be able to find it Add complex functionality to provider: •Selective interactivity (prompting the user) •Configuration •Use files from user storage area Implement a new client interface Building & Extending For Zend_Tool 19
    20. 20. Ensure Environment Is Setup Building & Extending For Zend_Tool 20
    21. 21. Build A Basic Provider Building & Extending For Zend_Tool 21
    22. 22. Register Provider With Tooling System Building & Extending For Zend_Tool 22
    23. 23. Ensure Provide Is Loaded •Checking the provider is available in console help (zf --help) Building & Extending For Zend_Tool 23
    24. 24. Making a Component Out of Providers •Create a manifest for our provider •Notice we moved the provider inside the Tool namespace Building & Extending For Zend_Tool 24
    25. 25. Running Your Basic Provider •Run the provider Building & Extending For Zend_Tool 25
    26. 26. Creating Metadata •Implement metadata attached to provider •(dynamic metadata) Building & Extending For Zend_Tool 26
    27. 27. Searching For Metadata Building & Extending For Zend_Tool 27
    28. 28. Running our provider SectionName 28
    29. 29. Building & Extending For Zend_Tool •Zend_Tool_Project extensions typical tasks Load existing profile Search for resources Create resources & contexts •Persist attributes Execute method on resource/contexts, such as create Store profile after changes Building & Extending Zend_Tool 29
    30. 30. What to Examine •Code to examine to learn more Zend_Tool_Framework •Zend_Tool_Framework_Client & Zend_Tool_Framework_Registry Zend_Tool_Project •Zend_Tool_Project_Provider_* (specifically DbAdapter, DbTable) •Zend_Tool_Project_Context_* (specifically ControllerFile, ViewScriptFile, DbTableFile) Zend_CodeGenerator_Php •This is needed to generate, and regenerate code in most cases Building & Extending Zend_Tool 30
    31. 31. Links •Link to manual & good articles: http://framework.zend.com/manual/en/zend.tool.framework.html http://framework.zend.com/manual/en/zend.tool.project.html Building & Extending Zend_Tool 31
    32. 32. Building & Extending for Zend_Tool •Demo Time! Building & Extending Zend_Tool 32
    33. 33. Thank You! Questions? Comments? 33