Zend framework 2

1,459 views

Published on

Slides from my presentation on PhpDevby (June 2012, Minsk). This slides are based on presentation of Enrico Zimuel on ZFConf 2012 in Moscow.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,459
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Zend framework 2

  1. 1. Александр Симанович
  2. 2.  Руководитель группы разработчиков MTV Entertainment в EPAM Systems PHP Skill Manager в EPAM Systems
  3. 3.  Enrico Zimuel  ZF core developer  ZFConf 2012
  4. 4.  Обзор ZF2 Новая система Autoloading Dependency Injection Event manager Новый MVC Быстрый старт: ZendSkeletonApplication Система пакетов (packages) От ZF1 к ZF2
  5. 5.  Новая архитектура (MVC, DI, Events) >= PHP 5.3 Отменен CLA (Contributor License Agreement) Git (GitHub) вместо SVN Улучшенная производительность Модульность Система пакетов (packages)
  6. 6.  Подход ZF1:  Singleton  Registry  Hard-Coded Dependencies Подход ZF2:  Aspect Oriented Design  Dependency Injection
  7. 7.  Методологии  Уменьшение связанности кода (ZendDi)  Событийность (ZendEventManager)  Стандартные классы (ZendStdlib) Используются возможности PHP 5.3  Namespace  Лямбда функции и замыкания  Лучшая производительность
  8. 8.  Никаких require_once Множество подходов:  Стиль ZF1: include_path autoloader  Autoloading по префиксу или неймспейсу  Class-map autoloading
  9. 9.  Генерация .classmap.php из командной строки: bin/classmap_generator.php Usage is trivial: $ cd your/library $ php /path/to/classmap_generator.php -w
  10. 10.  Class-Maps дают 25% прироста по сравнению ZF1 autoloader без акселерации, 60-80% прироста, если используется кэширование опкода Связывание неймспейсов/префиксов с путем дает >10% прироста производительности без акселерации, 40% - с кэшированием опкодаNote: новый autoloading доступен в ZF 1.12
  11. 11.  Как управлять зависимостями между объектами? Dependency injection (DI) это шаблон проектирования, который снижает связанность между компонентами программы
  12. 12. class Foo { protected $bar; … public function __construct() { $this->bar= new Bar(); } …}
  13. 13. class Foo { protected $bar; … public function __construct(Bar $bar) { $this->bar = $bar; } …}
  14. 14. class Foo { protected $bar; … public function setBar(Bar $bar) { $this->bar = $bar; } …}
  15. 15. WITHOUT DI WITH DI (CONSTRUCT)Недостатки: Преимущества:  Сложно тестировать  Легко тестировать  Нет изоляции  Низкая связанность  Сложность повторного  Гибкая архитектура использования
  16. 16.  Поддерживает 3 типа инъекций:  Constructor  Interface  Setter Реализует DI Container:  Управление зависимостями с помощью конфигураций и аннотаций
  17. 17. $definition = array( Foo => array( setBar => array( bar => array( type => Bar, required => true, ), ), ),);
  18. 18. use ZendDiDi, ZendDiConfiguration;$di = new Di;$config = new Configuration(array( definition => array( class => $definition )));$config->configure($di);$foo = $di->get(Foo); // contains Bar!
  19. 19. namespace Example { use ZendDiDefinitionAnnotation as Di; class Foo { public $bar; /** * @DiInject() */ public function setBar(Bar $bar){ $this->bar = $bar; } } class Bar { }}
  20. 20. $compiler = newZendDiDefinitionCompilerDefinition();$compiler->addDirectory(File path of Foo and Bar);$compiler->compile();$definitions = new ZendDiDefinitionList($compiler);$di = new ZendDiDi($definitions);$baz = $di->get(ExampleFoo); // contains Bar!
  21. 21.  Event Manager – объект, агрегирующий слушателей для одного или нескольких событий, а также вызывающий события Listener – callback, реагирующий на события – слушатель. Event – это действие
  22. 22. use ZendEventManagerEventManager;$events = new EventManager();$events->attach(do, function($e) { $event = $e->getName(); $params = $e->getParams(); printf(‘Еvent “%s”, with parameters %s, $event, json_encode($params));});$params = array(foo => bar, baz => bat);$events->trigger(do, null, $params);
  23. 23.  Bootstrap, route, dispatch, response… В MVC ZF2 все является событием
  24. 24.  Базовый блок в ZF2 MVC приложении это модуль Модуль это коллекция кода и других файлов, которые решают специфическую атомарную задачу большой бизнес задачи Модуль это:  Namespace  Module.php
  25. 25.  Простой скелет приложения, использующий ZF2 MVC и модульную систему Работает на ZF2.0.0beta4 Весь на код на GitHub, submodules…git clone –recursivegit://github.com/zendframework/ZendSkeletonApplication.git
  26. 26. ...router => array( routes => array( ... ),),controller => array( classes => array( index => ApplicationControllerIndexController ),),view_manager => array( display_not_found_reason => true, display_exceptions => true, doctype => HTML5,),...
  27. 27. namespace ApplicationController;use ZendMvcControllerActionController, ZendViewModelViewModel;class IndexController extends ActionController{ public function indexAction() { return new ViewModel(); }}
  28. 28.  Легко переносить модули:  Скопировать в папку module (или vendor)  Подключить модуль в application.config.php  Скопировать конфиг модуля в /config/autoload/module.<name>.config.php
  29. 29.  Pyrus 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>
  30. 30.  Переход с минимальной переписью кода Основные шаги  Namespace: Zend_Foo => ZendFoo  Exceptions: Zend_Exception больше нет (интерфейс для каждого компонента)  Autoloading: 3 варианта (ZF1 включительно)  MVC: модули, события
  31. 31. http://tiny.cc/5dw8ew
  32. 32.  2 марта 2012 – ZF2 beta 3 released 22 мая 2012 – ZF2 beta 4 released  Travis CI integration  Composer support (http://packagist.org/) ZF2 beta 5? Релиз? «Начало лета»?
  33. 33.  http://framework.zend.com/zf2 http://github.com/zendframework https://github.com/zendframework/ZendSkel etonApplication Getting Started with Zend Framework 2 by Rob Allen, http://www.akrabat.com Еженедельные IRC митинги (#zf2-meeting on Freenode) #zftalk.2 on Freenode IRC
  34. 34. • Email: as@extrascript.com• Skype: aliaksandr.simanovich• Twitter: simanjan• Blog: simanovich.info

×