Zend_Tool: Practical use and Extending
Upcoming SlideShare
Loading in...5
×
 

Zend_Tool: Practical use and Extending

on

  • 5,506 views

Talk by Ralph Schindler of Zend, at ZendCon 2009

Talk by Ralph Schindler of Zend, at ZendCon 2009

Statistics

Views

Total Views
5,506
Views on SlideShare
5,478
Embed Views
28

Actions

Likes
2
Downloads
143
Comments
0

2 Embeds 28

http://www.scoop.it 18
http://www.slideshare.net 10

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

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

Zend_Tool: Practical use and Extending Zend_Tool: Practical use and Extending Presentation Transcript

  • 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 • Website: http://ralphschindler.com/ • Project: http://framework.zend.com/ • @ralphschindler (http://twitter.com/ralphschindler) • Slides at: (provide link) • Code download link: (provide link) 2
  • What’s Zend_Tool All About, Again? A quick review of where Zend_Tool came from, and where its going. 3
  • 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
  • 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
  • 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
  • System Overview Let’s have a stroll through the Zend_Tool architecture 7
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Building & extending for Zend_Tool With so many extension points, where does one start? 18
  • 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
  • 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) 23
  • Building & Extending For Zend_Tool • Create a manifest for our provider • Notice we moved the provider inside the Tool namespace 24
  • Building & Extending For Zend_Tool • Run the provider 25
  • Building & Extending For Zend_Tool • Implement metadata attached to provider • (dynamic metadata) 26
  • Building & Extending For Zend_Tool • Search for metadata 27
  • Building & Extending For Zend_Tool • Add interactivity to provider • (screenshot) 28
  • Building & Extending For Zend_Tool • Use the config file to retrieve a value • (screenshot) 29
  • Building & Extending For Zend_Tool • Use the storage area to return a file • (screenshot) 30
  • 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
  • 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
  • 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
  • Thank You! Questions? Comments? 34