ZF2 takes a different approach to services; there are several services out there and you should be providing the ability for ZF2 to integrate with this. ZF2 marries services with composer and a different packaging mechanism to ensure that services can be released without a specific framework version. This not only helps the framework but helps you prevent an API changing in between framework releases without having an issue of awaiting a framework release.
Writing Services with
Mike Willbanks | Barnes & Noble
Slides will be posted after the talk.
Sr. Web Architect Manager at NOOK Developer
Open Source Contributor
Where you can find me:
• Twitter: mwillbanks G+: Mike Willbanks
• IRC (freenode): mwillbanks Blog: http://blog.digitalstruct.com
• GitHub: https://github.com/mwillbanks
• ZF2 Services
• Writing a Service
• Implementing your Service
ZF 1 contained Zend_Service_* components
Components were included in the core
Make it easy for people to have it available…
Caused several issues
Started Getting Messy…
Services in ZF2
• RFC March 2012 “RFC Service Components”
• Removal of ZF2 Zend\Service namespace into a separate
namespace and repository.
Changing for the Better
• Ability to version separately from core framework
• Easier to leverage outside of a ZF context
• Encourage service providers to further contribute
Goals of ZF2 Services
• Independently versioned
• Dependencies on framework versions (2.*, 2.0.*, 2.0.1)
• Maintain dependencies by specific packages
• Must follow ZF coding standards
• Must be unique
A service that does the same thing should not already exist!
Services for Contribution (Official Services)
Service Component Lifecycle
CR Team Review Fork Repo
• Must be maintained for the duration of major versions
Exceptions must be noted in the ChangeLog
Component should only state dependency on minor versions
• Maintainers must attempt at all times to keep compatibility
with the latest version
If unable to maintain, actively recruit, if still unable ZF or CR team
will make a recommendation on the component.
How are we doing so far?
Writing a Service
By example of ZendService\Twitter
• Services are really just like framework libraries
However, the namespace implies 3rd party integrations.
They are also organized like the framework.
• Services should be reusable for other developers
Write it out based on the API and not just what you need.
• Create reasonable dependencies
Zend\Http and Zend\Stdlib being most common.
• Modules are more specifically for ZF
• Components are reusable libraries for any code base.
• Base Rule
If it involves the MVC; it should more than likely be a module.
Why Not Modules?
• Build out the file structure:
• Add LICENSE, README, .travis.yml, .gitignore
Just copy these over from another project
Update the readme for the project
Create Your Composer File
• Because we all do TDD right?
From a module; copy over the _autoload.php, Bootstrap.php,
• You will need to customize
phpunit.xml.dist – Change out the unit test name.
TestConfiguration.php.dist – Configure your constants and
• Tests should contain proper namespacing
• Right now the Twitter component just uses ZendTest\Twitter J
• Files you need should be located in an _files directory
inside the test area of your component
• Write unit tests like normal!
• The guts of the library is what most of us are familiar with
• Write your library inside of your compliant directory
• Your first file should very well likely be that of the service
• Ensure proper namespacing
• Remember to make use of the coding standards!
• @category Zend
• @package Zend_Service
• @subpackage Twitter
Import the proper packages from their respective namespaces
• No one likes to write out the full namespace time and time again…
Read the coding standards doc:
• Mainly; PSR-0, PSR-1, PSR-2 (there are likely slight differences)
• The most dreaded part of the job…
• All of the documentation is in the “zf2-documentation”
project under the “zendframework” github organization.
This will likely change for services in the future.
• Fork the project
• Create a feature branch: feature/twitter
• Write your documentation
• Submit a PR
• Documentation is built out of reStructuredText
Yes, Docbook has gone away; so fear not!
• Language Files
Always start with English first aka “en” as it is the default in the
event a translation is missing.
• Modify docs/language/en/index.rst to add in your new
Follow the convention; for a service you will use
• Create your file
docs/language/en/modules/zendservice.twitter.intro.rst or the
• Install the proper tools
apt-get install python-setuptools python-pygments
easy_install -U Sphinx
• Enter the docs/ directory
• Run: make html
• Your documentation will now be in:
Review for errors before sending the PR
Seeing your Documentation
Integrating your Service
• Add the module to the composer configuration
• Add in potential configuration
• Setup the service manager
• Fetch it inside of a controller
We will leverage the Skeleton Application
php composer.php install
Setup the Service Manager
• These slides will be posted to SlideShare & SpeakerDeck.
G+: Mike Willbanks
IRC (freenode): mwillbanks