Extending Zend_Tool

By Ralph Schindler - Software Engineer
Who Am I?
• Ralph Schindler
• Software Engineer on the Zend Framework Team at Zend
• Email: ralph.schindler@zend.com
• Web...
What’s Zend_Tool All About, Again?
A quick review of where Zend_Tool came from, and where its
going.




                 ...
What’s Zend_Tool All About, Again?
• Rapid application development of ZF projects
• Tooling framework
 Framework for buil...
What’s Zend_Tool All About, Again?
• Zend_Tool in ZF 1.8
• Zend_Application in 1.8
• Built in project providers:
 create ...
What’s Zend_Tool All About, Again?
• New features in 1.10
 New base loader (no more include_path scanning)
 Providers
  ...
System Overview
Let’s have a stroll through the Zend_Tool architecture




                                               ...
System Overview
• Two main “components”
 Zend_Tool_Framework
   • The component responsible for dispatching tooling reque...
System Overview
• Zend_Tool_Framework
 Dispatch style framework, designed to abstract enough system
  internals to make e...
System Overview / Zend_Tool_Framework
• Zend_Tool_Framework_Client
 Responsibilities:
   • Request object
   • Response o...
System Overview / Zend_Tool_Framework
• Zend_Tool_Framework_Client_Storage &
  Zend_Tool_Framework_Client_Config
 Respons...
System Overview / Zend_Tool_Framework
• Zend_Tool_Framework_Loader
 Responsibilities:
   • Load files provided
   • Searc...
System Overview / Zend_Tool_Framework
• Zend_Tool_Framework_Provider & Provider Registry
 Responsibilities:
   • An inter...
System Overview / Zend_Tool_Framework
• Zend_Tool_Framework_Manifest & Manifest Repository
 Responsibilities:
   • Manife...
System Overview
• Zend_Tool_Project
 Problem: How to successfully model all the notions of a “project”?
 What is a “proj...
System Overview / Zend_Tool_Project
• Zend_Tool_Project_Profile
 Responsibilities:
   • loading, parsing, serializing and...
System Overview / Zend_Tool_Project
• Zend_Tool_Project_Context
 Responsibilities
   • The class most responsible for the...
Building & extending for Zend_Tool
With so many extension points, where does one start?




                              ...
Building & Extending For Zend_Tool
• Path of least resistance when learning to extend:
 Implement a provider, and be able...
Building & Extending For Zend_Tool
• Ensuring our environment is setup




                                      20
Building & Extending For Zend_Tool
• Basic provider




                                     21
Building & Extending For Zend_Tool
• Enter new provider in config file




                                      22
Building & Extending For Zend_Tool
• Checking the provider is available in console help (zf --help)




                  ...
Building & Extending For Zend_Tool
• Create a manifest for our provider
• Notice we moved the provider inside the Tool nam...
Building & Extending For Zend_Tool
• Run the provider




                                     25
Building & Extending For Zend_Tool
• Implement metadata attached to provider
• (dynamic metadata)




                    ...
Building & Extending For Zend_Tool
• Search for metadata




                                     27
Building & Extending For Zend_Tool
• Add interactivity to provider
• (screenshot)




                                    ...
Building & Extending For Zend_Tool
• Use the config file to retrieve a value
• (screenshot)




                          ...
Building & Extending For Zend_Tool
• Use the storage area to return a file
• (screenshot)




                            ...
Building & Extending For Zend_Tool
• Zend_Tool_Project extensions typical tasks
 Load existing profile
 Search for resou...
Building & Extending For Zend_Tool
• Code to examine to learn more
 Zend_Tool_Framework
   • Zend_Tool_Framework_Client &...
Building & Extending For Zend_Tool
• Links to example files:
 (link here)

• Link to manual & good articles:
 http://fra...
Thank You!
Questions? Comments?




                       34
Upcoming SlideShare
Loading in...5
×

Zend_Tool: Practical use and Extending

3,694

Published on

Talk by Ralph Schindler of Zend, at ZendCon 2009

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

No Downloads
Views
Total Views
3,694
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
145
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Zend_Tool: Practical use and Extending

    1. 1. Extending Zend_Tool By Ralph Schindler - Software Engineer
    2. 2. Who Am I? • Ralph Schindler • Software Engineer on the Zend Framework Team at Zend • Email: ralph.schindler@zend.com • Website: http://ralphschindler.com/ • Project: http://framework.zend.com/ • @ralphschindler (http://twitter.com/ralphschindler) • Slides at: (provide link) • Code download link: (provide link) 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. What’s Zend_Tool All About, Again? • 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 ... 4
    5. 5. What’s Zend_Tool All About, Again? • 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 5
    6. 6. What’s Zend_Tool All About, Again? • New features in 1.10 New base loader (no more include_path scanning) Providers • DbAdapter configuration • DbTable creation based on database tables • Layout enabling and creation (Web client interface) 6
    7. 7. System Overview Let’s have a stroll through the Zend_Tool architecture 7
    8. 8. System Overview • 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 8
    9. 9. System Overview • 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 9
    10. 10. System Overview / Zend_Tool_Framework • 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 10
    11. 11. System Overview / Zend_Tool_Framework • 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 11
    12. 12. System Overview / Zend_Tool_Framework • 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 12
    13. 13. System Overview / Zend_Tool_Framework • Zend_Tool_Framework_Provider & 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” 13
    14. 14. System Overview / Zend_Tool_Framework • 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) 14
    15. 15. System Overview • 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 15
    16. 16. System Overview / Zend_Tool_Project • 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 16
    17. 17. System Overview / Zend_Tool_Project • Zend_Tool_Project_Context Responsibilities • The class most responsible for the “what” part of project modeling • Is assigned to a Zend_Tool_Project_Profile_Resource object – (This is known as “composition”) • Example contexts: – Controller file – View script directory – View script file – Model file – Action method – ... 17
    18. 18. Building & extending for Zend_Tool With so many extension points, where does one start? 18
    19. 19. Building & Extending For Zend_Tool • 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 19
    20. 20. Building & Extending For Zend_Tool • Ensuring our environment is setup 20
    21. 21. Building & Extending For Zend_Tool • Basic provider 21
    22. 22. Building & Extending For Zend_Tool • Enter new provider in config file 22
    23. 23. Building & Extending For Zend_Tool • Checking the provider is available in console help (zf --help) 23
    24. 24. Building & Extending For Zend_Tool • Create a manifest for our provider • Notice we moved the provider inside the Tool namespace 24
    25. 25. Building & Extending For Zend_Tool • Run the provider 25
    26. 26. Building & Extending For Zend_Tool • Implement metadata attached to provider • (dynamic metadata) 26
    27. 27. Building & Extending For Zend_Tool • Search for metadata 27
    28. 28. Building & Extending For Zend_Tool • Add interactivity to provider • (screenshot) 28
    29. 29. Building & Extending For Zend_Tool • Use the config file to retrieve a value • (screenshot) 29
    30. 30. Building & Extending For Zend_Tool • Use the storage area to return a file • (screenshot) 30
    31. 31. 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 31
    32. 32. Building & Extending For Zend_Tool • 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_Tool_CodeGenerator_Php • This is needed to generate, and regenerate code in most cases 32
    33. 33. Building & Extending For Zend_Tool • Links to example files: (link here) • Link to manual & good articles: http://framework.zend.com/manual/en/zend.tool.framework.html (more) 33
    34. 34. Thank You! Questions? Comments? 34
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×