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. What’s Zend_Tool All About, Again?
A quick review of where Zend_Tool came from, and where its
going.
3
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. 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. 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
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. 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. 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. 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. 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
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. 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. 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. 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. Building & Extending for Zend_Tool
With so many extension points, where does one start?
18
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
23. Ensure Provide Is Loaded
•Checking the provider is available in console help (zf --help)
Building & Extending For Zend_Tool 23
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. Running Your Basic Provider
•Run the provider
Building & Extending For Zend_Tool 25
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. 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. 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. Building & Extending for Zend_Tool
•Demo Time!
Building & Extending Zend_Tool 32