Skip to main content
A quick start on
Zend Framework 2
by Enrico Zimuel (enrico@zend.com)

Senior Software Engineer
Zend Framework Core Team
Zend Technologies Ltd




                                     © All rights reserved. Zend Technologies, Inc.
About me

                        • Enrico Zimuel (@ezimuel)
                        • Software Engineer since 1996
                               – Assembly x86, C/C++, Java, Perl, PHP
                        • PHP Engineer at Zend Technologies in
  @ezimuel                           the Zend Framework Team
  enrico@zend.com       • International speaker on PHP and
                                     computer security topics
  www.zimuel.it
                        • Researcher programmer at
                                     Informatics Institute of University
                                     of Amsterdam
                        • Co-founder of the PUG Torino (Italy)


                    © All rights reserved. Zend Technologies, Inc.
ZF2 in a slide

●   New architecture
      ▶   MVC, Di, Events, Service, Module
●   Better performance
●   Requirement: PHP 5.3.3
●   No more CLA (Contributor License Agreement)
●   Git (GitHub) instead of SVN
●   Packaging system
      ▶   pyrus, composer


                    © All rights reserved. Zend Technologies, Inc.
A new core

●   The ZF1 way:
       ▶   Singleton, Registry, and
             Hard-Coded
             Dependencies
●   The ZF2 approach:
       ▶   Aspect Oriented Design
             and Dependency
             Injection




                      © All rights reserved. Zend Technologies, Inc.
MVC is event driven


●   Everything is an event



       bootstrap                  route                             dispatch




       Listeners


                   © All rights reserved. Zend Technologies, Inc.
Releases

●   ZF2.0.0beta4
●   Goal:
     ▶   beta5 at the end of June
     ▶   ZF 2.0 RC this summer!!!




                      © All rights reserved. Zend Technologies, Inc.
Quick start
Zend Skeleton Application




        © All rights reserved. Zend Technologies, Inc.
Zend Skeleton Application

●   A simple, skeleton application using the new MVC
    layer and the module system
●   How to install:
    $   cd my/project/dir
    $   git clone git://github.com/zendframework/ZendSkeletonApplication.git
    $   cd ZendSkeletonApplication
    $   php composer.phar install




                              © All rights reserved. Zend Technologies, Inc.
Output




         © All rights reserved. Zend Technologies, Inc.
Folder's tree

  config
  data
  module
  public
  vendor




                © All rights reserved. Zend Technologies, Inc.
Config folder

  config
         autoload
     application.config.php
  data
  module
  public
  vendor



                    © All rights reserved. Zend Technologies, Inc.
Data folder

  config
  data
         cache
  module
  public
  vendor




                 © All rights reserved. Zend Technologies, Inc.
Module folder
 module
     Application                          Name of the module
             config
                 module.config.php
             src
                    Application
                          Controller
                               IndexController.php
             view
                    application
                          index
                                 index.phtml
                    error
                    layout
          Module.php

                   © All rights reserved. Zend Technologies, Inc.
Public folder

  public
       images
       js
       css
     .htaccess
     index.php




                 © All rights reserved. Zend Technologies, Inc.
Vendor folder

  config
  data
  module
  public
  vendor
         zendframework




                 © All rights reserved. Zend Technologies, Inc.
configuration



    © All rights reserved. Zend Technologies, Inc.
/config/application.config.php




             © All rights reserved. Zend Technologies, Inc.
public folder



    © All rights reserved. Zend Technologies, Inc.
public/.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]




                 © All rights reserved. Zend Technologies, Inc.
public/index.php




            © All rights reserved. Zend Technologies, Inc.
ZendServiceManager

 ●   The ServiceManager is a Service Locator
     implementation
 ●   A Service Locator is a well-known object in
     which you may register objects (more in
     general services) and later retrieve them
 ●   Driven by configuration




                    © All rights reserved. Zend Technologies, Inc.
Types of Services

 ●   Explicit (name => object pairs)
 ●   Invokables (name => class to instantiate)
 ●   Factories (name => callable returning object)
 ●   Aliases (name => some other name)
 ●   Abstract Factories (unknown services)
 ●   Scoped Containers (limit what can be created)
 ●   Shared (or not; you decide)



                   © All rights reserved. Zend Technologies, Inc.
module



 © All rights reserved. Zend Technologies, Inc.
Modules by default



 A module is all related code and assets
     that solve a specific problem.
Modules inform the MVC about services
          and event listeners




              © All rights reserved. Zend Technologies, Inc.
Modules for ZF2

●   The basic unit in a ZF2 application
    is a Module
●   Modules are “Plug and play” technology
●   Modules are simple:
       ▶   A namespace
       ▶   Containing a single classfile: Module.php




                      © All rights reserved. Zend Technologies, Inc.
Develop Modules

●   Modules contain all logic related to a
    discrete application problem.
       ▶   Controllers
       ▶   Entities
       ▶   Plugins
       ▶   Etc.
●   99% of the time, you will write modules


                      © All rights reserved. Zend Technologies, Inc.
moduleApplicationModule.php




            © All rights reserved. Zend Technologies, Inc.
/module/Application/config/module.config.php
(routing part)




                © All rights reserved. Zend Technologies, Inc.
/module/Application/config/module.config.php
(controller part)




                © All rights reserved. Zend Technologies, Inc.
/module/Application/config/module.config.php
(view)




                © All rights reserved. Zend Technologies, Inc.
/module/Application/src/Application/
    Controller/IndexController.php




                Passing array() of variables to the view


                 © All rights reserved. Zend Technologies, Inc.
Packaging system




     © All rights reserved. Zend Technologies, Inc.
Pyrus

●   http://packages.zendframework.com/
●   Download or use pyrus, a PEAR2 installer
●   Pyrus packages:
     ▶   Pyrus setup
     ▶   wget http://packages.zendframework.com/pyrus.phar
     ▶   pyrus.phar .
     ▶   pyrus.phar . channel­discover packages.zendframework.com

     ▶   Install a Zend_<component>
     ▶   pyrus.phar . install zf2/Zend_<component>




                        © All rights reserved. Zend Technologies, Inc.
Composer

●   New package management and distribution
    tool
●   http://packagist.org/
●   http://getcomposer.org/




                   © All rights reserved. Zend Technologies, Inc.
composer.json




          © All rights reserved. Zend Technologies, Inc.
From ZF1 to ZF2




     © All rights reserved. Zend Technologies, Inc.
From ZF1 to ZF2

●   Goal: migrate without rewriting much code!
●   Main steps
       ▶   Namespace: Zend_Foo => ZendFoo
       ▶   Autoloading: 3 options
       ▶   MVC: module, event based, dispatchable
       ▶   DB: new ZendDb
       ▶   Form: new ZendForm
●   Can run in parallel (instant migration!)


                     © All rights reserved. Zend Technologies, Inc.
Conclusion:
ZF2 rocks!



   © All rights reserved. Zend Technologies, Inc.
Why ZF2 rocks!

●   Based on solid architecture principles
●   Very fast (focused on optimization)
●   Open architecture (event driven)
●   Support of modules (reuse of the code)
●   Driven by the community
    (100% open source)
●   Completed tested (PHPUnit, Travis CI)
●   Packages (pyrus, composer)



                      © All rights reserved. Zend Technologies, Inc.
We want you!

●   How to contribute:
    ▶   Write code
    ▶   Documentation
    ▶   Testing
    ▶   Feedbacks/comments




         https://github.com/zendframework/zf2

                     © All rights reserved. Zend Technologies, Inc.
Helping out

●   http://framework.zend.com/zf2
●   http://github.com/zendframework
●   https://github.com/zendframework/ZendSkeletonApplication
●   Getting Started with Zend Framework 2
    by Rob Allen, http://www.akrabat.com
●   Weekly IRC meetings (#zf2-meeting on
    Freenode)
●   #zftalk.2 on Freenode IRC



                       © All rights reserved. Zend Technologies, Inc.
Thank you!

 ●   Comment this talk at:
       ▶   https://joind.in/6237
 ●   Direct contact:
       ▶   enrico@zend.com
       ▶   @ezimuel




                      © All rights reserved. Zend Technologies, Inc.