SlideShare a Scribd company logo
Extending Zend_Tool

By Ralph Schindler - Software Engineer
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
What’s Zend_Tool All About, Again?
A quick review of where Zend_Tool came from, and where its
going.




                                                             3
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
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
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
System Overview
Let’s have a stroll through the Zend_Tool architecture




                                                         7
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
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
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
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
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
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
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
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
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
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
Building & Extending for Zend_Tool
With so many extension points, where does one start?




                                                       18
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
Ensure Environment Is Setup




                         Building & Extending For Zend_Tool   20
Build A Basic Provider




                         Building & Extending For Zend_Tool   21
Register Provider With Tooling System




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




                                       Building & Extending For Zend_Tool   23
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
Running Your Basic Provider
•Run the provider




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




                                   Building & Extending For Zend_Tool   26
Searching For Metadata




                         Building & Extending For Zend_Tool   27
Running our provider




                       SectionName   28
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
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
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
Building & Extending for Zend_Tool
•Demo Time!




                            Building & Extending Zend_Tool   32
Thank You!
Questions? Comments?




                       33

More Related Content

PPT
2007 Zend Con Mvc Edited Irmantas
PPT
Using Zend_Tool to Establish Your Project's Skeleton
PPT
Zend Framework Introduction
PDF
Deprecated: Foundations of Zend Framework 2
PDF
A quick start on Zend Framework 2
PDF
Zend Framework 2 quick start
ODP
Introduction to Zend Framework
ODP
Java Code Generation for Productivity
2007 Zend Con Mvc Edited Irmantas
Using Zend_Tool to Establish Your Project's Skeleton
Zend Framework Introduction
Deprecated: Foundations of Zend Framework 2
A quick start on Zend Framework 2
Zend Framework 2 quick start
Introduction to Zend Framework
Java Code Generation for Productivity

What's hot (19)

PPTX
Hibernate
PPT
Zend Framework 2
PDF
Java Enterprise Edition
PDF
Zend Framework 2 - Basic Components
PDF
Zend Framework 2 Components
PDF
.NET Core, ASP.NET Core Course, Session 12
PDF
Apache DeltaSpike the CDI toolbox
PDF
.NET Core, ASP.NET Core Course, Session 16
PPT
Apache Ant
PDF
Spring - CDI Interop
PPTX
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
PDF
Drupal8 for Symfony Developers (PHP Day Verona 2017)
PDF
Spring 4 on Java 8 by Juergen Hoeller
PPTX
Rest and Sling Resolution
PDF
How to build customizable multitenant web applications - PHPBNL11
PDF
Kicking off with Zend Expressive and Doctrine ORM (PHPNW2016)
PPT
Ant - Another Neat Tool
ODP
Dependency Injection, Zend Framework and Symfony Container
Hibernate
Zend Framework 2
Java Enterprise Edition
Zend Framework 2 - Basic Components
Zend Framework 2 Components
.NET Core, ASP.NET Core Course, Session 12
Apache DeltaSpike the CDI toolbox
.NET Core, ASP.NET Core Course, Session 16
Apache Ant
Spring - CDI Interop
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
Drupal8 for Symfony Developers (PHP Day Verona 2017)
Spring 4 on Java 8 by Juergen Hoeller
Rest and Sling Resolution
How to build customizable multitenant web applications - PHPBNL11
Kicking off with Zend Expressive and Doctrine ORM (PHPNW2016)
Ant - Another Neat Tool
Dependency Injection, Zend Framework and Symfony Container
Ad

Similar to Extending Zend_Tool (20)

KEY
Zend_Tool: Practical use and Extending
PDF
Zend_Tool In ZF 1.8 Webinar
PPT
Zend Framework 1.8 Features Webinar
KEY
Extending ZF & Extending With ZF
PDF
Quick start on Zend Framework 2
PPTX
MVC Frameworks for building PHP Web Applications
PPT
Zend_Tool: Rapid Application Development with Zend Framework
KEY
Zend Code in ZF 2.0
PDF
Getting started-with-zend-framework
PPTX
Getting up & running with zend framework
PPTX
Getting up and running with Zend Framework
PDF
ZF2 Presentation @PHP Tour 2011 in Lille
ODP
Zero to Zend Framework in 10 minutes
PDF
Zend Framework 2, What's new, Confoo 2011
PDF
Building Web Applications with Zend Framework
PPT
Unit Test for ZF SlideShare Component
PPT
Unit Test for ZF SlideShare Component
PPT
Unit Test for ZF SlideShare Component
PPT
Unit Test for ZF SlideShare Component
PPT
Unit Test for ZF SlideShare Component
Zend_Tool: Practical use and Extending
Zend_Tool In ZF 1.8 Webinar
Zend Framework 1.8 Features Webinar
Extending ZF & Extending With ZF
Quick start on Zend Framework 2
MVC Frameworks for building PHP Web Applications
Zend_Tool: Rapid Application Development with Zend Framework
Zend Code in ZF 2.0
Getting started-with-zend-framework
Getting up & running with zend framework
Getting up and running with Zend Framework
ZF2 Presentation @PHP Tour 2011 in Lille
Zero to Zend Framework in 10 minutes
Zend Framework 2, What's new, Confoo 2011
Building Web Applications with Zend Framework
Unit Test for ZF SlideShare Component
Unit Test for ZF SlideShare Component
Unit Test for ZF SlideShare Component
Unit Test for ZF SlideShare Component
Unit Test for ZF SlideShare Component
Ad

More from Ralph Schindler (7)

KEY
Zend Di in ZF 2.0
PDF
Zend Framework 1 + Doctrine 2
PDF
484 Days of PHP 5.3
PDF
Modeling best practices
PPT
What's New in ZF 1.10
PDF
Software Engineering In PHP
PPT
Zend_Layout & Zend_View Enhancements
Zend Di in ZF 2.0
Zend Framework 1 + Doctrine 2
484 Days of PHP 5.3
Modeling best practices
What's New in ZF 1.10
Software Engineering In PHP
Zend_Layout & Zend_View Enhancements

Recently uploaded (20)

PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
MYSQL Presentation for SQL database connectivity
PPT
Teaching material agriculture food technology
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
Cloud computing and distributed systems.
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Big Data Technologies - Introduction.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
cuic standard and advanced reporting.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
Chapter 3 Spatial Domain Image Processing.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
MYSQL Presentation for SQL database connectivity
Teaching material agriculture food technology
Review of recent advances in non-invasive hemoglobin estimation
Cloud computing and distributed systems.
Machine learning based COVID-19 study performance prediction
Big Data Technologies - Introduction.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Encapsulation_ Review paper, used for researhc scholars
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Per capita expenditure prediction using model stacking based on satellite ima...
Dropbox Q2 2025 Financial Results & Investor Presentation
The Rise and Fall of 3GPP – Time for a Sabbatical?
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
cuic standard and advanced reporting.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Programs and apps: productivity, graphics, security and other tools

Extending Zend_Tool

  • 1. Extending Zend_Tool By Ralph Schindler - Software Engineer
  • 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
  • 7. System Overview Let’s have a stroll through the Zend_Tool architecture 7
  • 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
  • 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. 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
  • 20. Ensure Environment Is Setup Building & Extending For Zend_Tool 20
  • 21. Build A Basic Provider Building & Extending For Zend_Tool 21
  • 22. Register Provider With Tooling System Building & Extending For Zend_Tool 22
  • 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
  • 26. Creating Metadata •Implement metadata attached to provider •(dynamic metadata) Building & Extending For Zend_Tool 26
  • 27. Searching For Metadata Building & Extending For Zend_Tool 27
  • 28. Running our provider SectionName 28
  • 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