ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
Upcoming SlideShare
Loading in...5
×
 

ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)

on

  • 6,189 views

http://www.zfconf.ru/2012/talks/zend-framework-2-a-quick-start/

http://www.zfconf.ru/2012/talks/zend-framework-2-a-quick-start/

Statistics

Views

Total Views
6,189
Views on SlideShare
3,057
Embed Views
3,132

Actions

Likes
7
Downloads
99
Comments
0

8 Embeds 3,132

http://www.zfconf.ru 2808
http://doda.jp 264
http://cms.doda.jp 33
https://cms.doda.jp 14
http://sdtglmz.wikispaces.com 5
https://doda.jp 4
http://zend-me.overblog.com 3
http://localhost 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

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

ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel) ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel) Presentation Transcript

  • Zend Framework 2quick startby Enrico Zimuel (enrico@zend.com)Senior Software EngineerZend Framework Core TeamZend Technologies LtdZFConf – 21th April 2012 Moscow © All rights reserved. Zend Technologies, Inc.
  • About me • Enrico Zimuel (@ezimuel) • Software Engineer since 1996 – Assembly x86, C/C++, Java, Perl, PHP • Enjoying PHP since 1999 • PHP Engineer at Zend since 2008 • Zend Framework Core Team from 2011 • B.Sc. Computer Science and Economics from University of Pescara (Italy) © All rights reserved. Zend Technologies, Inc.
  • Summary● Overview of ZF2● The new autoloading system● Dependency Injection● Event manager● The new MVC● Quick start: ZendSkeletonApplication● Package system● From ZF1 to ZF2 © All rights reserved. Zend Technologies, Inc. View slide
  • ZF2 key features● New architecture (MVC, Di, Events)● Requirement: PHP 5.3● No more CLA (Contributor License Agreement)● Git (GitHub) instead of SVN● Better performance● Module management● Packaging system © All rights reserved. Zend Technologies, Inc. View slide
  • 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.
  • New architectural approach● Methodologies used in the development – Decoupling (ZendDi) – Event driven (ZendEventManager) – Standard interfaces (ZendStdlib)● Take advantage of PHP 5.3 ▶ Namespace ▶ Lambda Functions and Closures ▶ Better performance © All rights reserved. Zend Technologies, Inc.
  • Autoloading © All rights reserved. Zend Technologies, Inc.
  • Autoloading● No more require_once calls!● Multiple approaches: – ZF1-style include_path autoloader – Per-namespace/prefix autoloading – Class-map autoloading © All rights reserved. Zend Technologies, Inc.
  • Classmap generator● How to generate the .classmap.php? We provided a command line tool: bin/classmap_generator.php● Usage is trivial: $ cd your/library $ php /path/to/classmap_generator.php -w● Class-Map will be created in .classmap.php © All rights reserved. Zend Technologies, Inc.
  • Performance improvement● Class-Maps show a 25% improvement on the ZF1 autoloader when no acceleration is present ▶ 60-85% improvements when an opcode cache is in place!● Pairing namespaces/prefixes with specific paths shows >10% gains with no acceleration ▶ 40% improvements when an opcode cache is in place!Note: The new autoloading system of ZF2 has been ported to ZF 1.12 © All rights reserved. Zend Technologies, Inc.
  • Dependency Injection © All rights reserved. Zend Technologies, Inc.
  • Dependency injection● How to manage dependencies between objects?● Dependency injection (Di) is a design pattern whose purpose is to reduce the coupling between software components Its time for your dependency injection! © All rights reserved. Zend Technologies, Inc.
  • Di by construct Without Di With Di (construct)class Foo { class Foo { protected $bar; protected $bar; … … public function __construct() { public function $this->bar= new Bar(); __construct(Bar $bar) { } $this->bar = $bar; … }} … } Cons: Pros: Difficult to test Easy to test No isolation Decoupling Difficult to reuse code Flexible architecture © All rights reserved. Zend Technologies, Inc.
  • Di by setterclass Foo{ protected $bar; … public function setBar(Bar $bar) { $this->bar = $bar; } …} © All rights reserved. Zend Technologies, Inc.
  • ZendDi ● Supports the 3 different injection patterns: – Constructor – Interface – Setter ● Implements a Di Container: – Manage the dependencies using configuration and annotation – Provide a compiler to autodiscover classes in a path and create the class definitions, for dependencies © All rights reserved. Zend Technologies, Inc.
  • Sample definition $definition = array( Foo => array( setBar => array( bar => array( type => Bar, required => true, ), ), ), ); © All rights reserved. Zend Technologies, Inc.
  • Using the Di container use ZendDiDi, ZendDiConfiguration; $di = new Di; $config = new Configuration(array( definition => array(class => $definition) )); $config->configure($di); $foo = $di->get(Foo); // contains Bar! © All rights reserved. Zend Technologies, Inc.
  • Di by annotationnamespace Example { use ZendDiDefinitionAnnotation as Di; class Foo { public $bam; /** * @DiInject() */ public function setBar(Bar $bar){ $this->bar = $bar; } } class Bar { }} © All rights reserved. Zend Technologies, Inc.
  • Di by annotation (2)$compiler = new ZendDiDefinitionCompilerDefinition();$compiler->addDirectory(File path of Foo and Bar);$compiler->compile();$definitions = new ZendDiDefinitionList($compiler);$di = new ZendDiDi($definitions);$baz = $di->get(ExampleFoo); // contains Bar!More use cases of ZendDi:https://github.com/ralphschindler/zf2-di-use-cases © All rights reserved. Zend Technologies, Inc.
  • Event Manager © All rights reserved. Zend Technologies, Inc.
  • Event Manager● An Event Manager is an object that aggregates listeners for one or more named events, and which triggers events.● A Listener is a callback that can react to an event.● An Event is an action. © All rights reserved. Zend Technologies, Inc.
  • Exampleuse ZendEventManagerEventManager;$events = new EventManager();$events->attach(do, function($e) { $event = $e->getName(); $params = $e->getParams(); printf( Handled event “%s”, with parameters %s, $event, json_encode($params) );});$params = array(foo => bar, baz => bat);$events->trigger(do, null, $params); © All rights reserved. Zend Technologies, Inc.
  • MVC© All rights reserved. Zend Technologies, Inc.
  • Event driven architecture● Flow: bootstrap, route, dispatch, response● Everything is an event in MVC of ZF2 © All rights reserved. Zend Technologies, Inc.
  • Modules● The basic unit in a ZF2 MVC application is a Module● A module is a collection of code and other files that solves a more specific atomic problem of the larger business problem● Modules are simply: ▶ A namespace ▶ Containing a single classfile, Module.php © All rights reserved. Zend Technologies, Inc.
  • Quick startZendSkeletonApplication © All rights reserved. Zend Technologies, Inc.
  • ZendSkeletonApplication● A simple, skeleton application using the ZF2 MVC layer and module systems● On GitHub: ▶ git clone --recursive git://github.com/zendframework/ZendSkeletonApplication.git● This project makes use of Git submodules● Works using ZF2.0.0beta3 © All rights reserved. Zend Technologies, Inc.
  • Folder tree config autoload application.config.php data module Application config vendor src public Application css Controller IndexController.php images view js Module.php .htaccess autoload_classmap.php index.php autoload_function.php autoload_register.php © All rights reserved. Zend Technologies, Inc.
  • Output © All rights reserved. Zend Technologies, Inc.
  • index.phpchdir(dirname(__DIR__));require_once (getenv(ZF2_PATH) ?:vendor/ZendFramework/library) ./Zend/Loader/AutoloaderFactory.php;ZendLoaderAutoloaderFactory::factory();$appConfig = include config/application.config.php;$listenerOptions = new ZendModuleListenerListenerOptions( $appConfig[module_listener_options]);$defaultListeners = newZendModuleListenerDefaultListenerAggregate($listenerOptions);$defaultListeners->getConfigListener() ->addConfigGlobPath("config/autoload/{,*.}{global,local}.config.php");... © All rights reserved. Zend Technologies, Inc.
  • index.php (2)...$moduleManager = new ZendModuleManager($appConfig[modules]);$moduleManager->events()->attachAggregate($defaultListeners);$moduleManager->loadModules();// Create application, bootstrap, and run$bootstrap = new ZendMvcBootstrap( $defaultListeners->getConfigListener()->getMergedConfig());$application = new ZendMvcApplication;$bootstrap->bootstrap($application);$application->run()->send(); © All rights reserved. Zend Technologies, Inc.
  • config/application.config.phpreturn array( modules => array( Application ), module_listener_options => array( config_cache_enabled => false, cache_dir => data/cache, module_paths => array( ./module, ./vendor, ), ),); © All rights reserved. Zend Technologies, Inc.
  • config/autoload● global.config.php● local.config.php.dist (.gitignore)● By default, this application is configured to load all configs in: ./config/autoload/{,*.}{global,local}.config.php.● Doing this provides a location for a developer to drop in configuration override files provided by modules, as well as cleanly provide individual, application-wide config files for things like database connections, etc. © All rights reserved. Zend Technologies, Inc.
  • Application/config/module.config.php return array( di => array( instance => array( … ) ) ); Here you configure the components of your application (i.e. routing, controller, view) © All rights reserved. Zend Technologies, Inc.
  • IndexController.phpnamespace ApplicationController;use ZendMvcControllerActionController, ZendViewModelViewModel;class IndexController extends ActionController{ public function indexAction() { return new ViewModel(); }} © All rights reserved. Zend Technologies, Inc.
  • Modules are “plug and play”● Easy to reuse a module, only 3 steps:1) Copy the module in module (or vendor) folder2) Enable the module in your application.config.php ▶ Add the name of the module in “modules”3) Copy the config file of the module in /config/autoload/module.<modules name>.config.php © All rights reserved. Zend Technologies, Inc.
  • modules.zendframework.com © All rights reserved. Zend Technologies, Inc.
  • Package system © All rights reserved. Zend Technologies, Inc.
  • Package system● We use Pyrus, a tool to manage PEAR packages. Pyrus simplifies and improves the PEAR experience.● Source packages (download + github): ▶ http://packages.zendframework.com/● Install and configure pyrus: ▶ 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.
  • From ZF1 to ZF2 © All rights reserved. Zend Technologies, Inc.
  • Migrate to ZF2● Goal: migrate without rewriting much code!● Main steps – Namespace: Zend_Foo => ZendFoo – Exceptions: an Interface for each components, no more Zend_Exception – Autoloading: 3 possible options (one is ZF1) ▶ MVC: module, event based, dispatchable © All rights reserved. Zend Technologies, Inc.
  • ZF1 migration prototype● Source code: http://bit.ly/pvc0X1● Creates a "Zf1Compat" version of the ZF1 dispatcher as an event listener.● The bootstrap largely mimics how ZF1s Zend_Application bootstrap works.● The default route utilizes the new ZF2 MVC routing, but mimics what ZF1 provided. © 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.
  • Questions? © All rights reserved. Zend Technologies, Inc.
  • Thank you!● Comments and feedbacks: – Email: enrico@zend.com – Twitter: @ezimuel © All rights reserved. Zend Technologies, Inc.