SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
Александр Симанович
   Руководитель группы разработчиков
    MTV Entertainment в EPAM Systems
   PHP Skill Manager в EPAM Systems
   Enrico Zimuel
     ZF core developer
     ZFConf 2012
   Обзор ZF2
   Новая система Autoloading
   Dependency Injection
   Event manager
   Новый MVC
   Быстрый старт: ZendSkeletonApplication
   Система пакетов (packages)
   От ZF1 к ZF2
   Новая архитектура (MVC, DI, Events)
   >= PHP 5.3
   Отменен CLA (Contributor License
    Agreement)
   Git (GitHub) вместо SVN
   Улучшенная производительность
   Модульность
   Система пакетов (packages)
   Подход ZF1:
     Singleton
     Registry
     Hard-Coded Dependencies
   Подход ZF2:
     Aspect Oriented Design
     Dependency Injection
   Методологии
     Уменьшение связанности кода (ZendDi)
     Событийность (ZendEventManager)
     Стандартные классы (ZendStdlib)
   Используются возможности PHP 5.3
     Namespace
     Лямбда функции и замыкания
     Лучшая производительность
   Никаких require_once
   Множество подходов:
     Стиль ZF1: include_path autoloader
     Autoloading по префиксу или неймспейсу
     Class-map autoloading
   Генерация .classmap.php из командной
    строки:
    bin/classmap_generator.php
   Usage is trivial:
    $ cd your/library
    $ php /path/to/classmap_generator.php -w
   Class-Maps дают 25% прироста по
    сравнению ZF1 autoloader без
    акселерации, 60-80% прироста, если
    используется кэширование опкода
   Связывание неймспейсов/префиксов с
    путем дает >10% прироста
    производительности без акселерации,
    40% - с кэшированием опкода

Note: новый autoloading доступен в ZF 1.12
   Как управлять зависимостями между
    объектами?
   Dependency injection (DI) это шаблон
    проектирования, который снижает
    связанность между компонентами
    программы
class Foo {
    protected $bar;
    …
    public function __construct() {
         $this->bar= new Bar();
    }
    …
}
class Foo {
     protected $bar;
     …
     public function __construct(Bar $bar) {
          $this->bar = $bar;
     }
     …
}
class Foo {
     protected $bar;
     …
     public function setBar(Bar $bar) {
          $this->bar = $bar;
     }
     …
}
WITHOUT DI                WITH DI (CONSTRUCT)

Недостатки:               Преимущества:
  Сложно тестировать       Легко тестировать
  Нет изоляции             Низкая связанность
  Сложность повторного     Гибкая архитектура
   использования
   Поддерживает 3 типа инъекций:
     Constructor
     Interface
     Setter
   Реализует DI Container:
     Управление зависимостями с помощью
     конфигураций и аннотаций
$definition = array(
     'Foo' => array(
          'setBar' => array(
               'bar' => array(
                     'type'     => 'Bar',
                     'required' => true,
               ),
          ),
     ),
);
use ZendDiDi,
     ZendDiConfiguration;
$di = new Di;
$config = new Configuration(array(
     'definition' => array(
          'class' => $definition
     )
));
$config->configure($di);
$foo = $di->get('Foo'); // contains Bar!
namespace Example {
      use ZendDiDefinitionAnnotation as Di;
      class Foo {
            public $bar;
            /**
             * @DiInject()
             */
            public function setBar(Bar $bar){
                  $this->bar = $bar;
            }
      }
      class Bar {
      }
}
$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!
   Event Manager – объект, агрегирующий
    слушателей для одного или нескольких
    событий, а также вызывающий события
   Listener – callback, реагирующий на
    события – слушатель.
   Event – это действие
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);
   Bootstrap, route, dispatch, response…
   В MVC ZF2 все является событием
   Базовый блок в ZF2 MVC приложении это
    модуль
   Модуль это коллекция кода и других
    файлов, которые решают специфическую
    атомарную задачу большой бизнес задачи
   Модуль это:
     Namespace
     Module.php
   Простой скелет приложения,
    использующий ZF2 MVC и модульную
    систему
   Работает на ZF2.0.0beta4
   Весь на код на GitHub, submodules…


git clone –recursive
git://github.com/zendframework/ZendSkeletonApplication.git
...
'router' => array(
       'routes' => array(
       ...
       ),
),
'controller' => array(
       'classes' => array(
               'index' => 'ApplicationControllerIndexController'
       ),
),
'view_manager' => array(
       'display_not_found_reason' => true,
       'display_exceptions'        => true,
       'doctype'                   => 'HTML5',
),
...
namespace ApplicationController;
use ZendMvcControllerActionController,
      ZendViewModelViewModel;

class IndexController extends ActionController
{
      public function indexAction()
      {
            return new ViewModel();
      }
}
   Легко переносить модули:
     Скопировать в папку module (или vendor)
     Подключить модуль в application.config.php
     Скопировать конфиг модуля в
     /config/autoload/module.<name>.config.php
   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>
   Переход с минимальной переписью кода
   Основные шаги
     Namespace: Zend_Foo => ZendFoo
     Exceptions: Zend_Exception больше нет
      (интерфейс для каждого компонента)
     Autoloading: 3 варианта (ZF1 включительно)
     MVC: модули, события
http://tiny.cc/5dw8ew
   2 марта 2012 – ZF2 beta 3 released
   22 мая 2012 – ZF2 beta 4 released
     Travis CI integration
     Composer support (http://packagist.org/)
   ZF2 beta 5?
   Релиз? «Начало лета»?
   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
•   Email: as@extrascript.com
•   Skype: aliaksandr.simanovich
•   Twitter: simanjan
•   Blog: simanovich.info
Zend framework 2

Mais conteúdo relacionado

Mais procurados

kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
Krivoy Rog IT Community
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
phpdevby
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
Dmitry Soshnikov
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
Paul Stashevsky
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
phpclub
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark
 
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
sqadays8
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
Technopark
 

Mais procurados (19)

Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 

Destaque (8)

DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓN
DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓNDESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓN
DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓN
 
Las funciones sociales de la escuela
Las funciones sociales de la escuelaLas funciones sociales de la escuela
Las funciones sociales de la escuela
 
Desarrollo histórico de la formación de sociólogos en la universidad
Desarrollo histórico de la formación de sociólogos en la universidadDesarrollo histórico de la formación de sociólogos en la universidad
Desarrollo histórico de la formación de sociólogos en la universidad
 
Funciones sociales de la educación
Funciones sociales de la educaciónFunciones sociales de la educación
Funciones sociales de la educación
 
Funciones sociales de la educación
Funciones sociales de la educaciónFunciones sociales de la educación
Funciones sociales de la educación
 
La educación y sus funciones ppt
La educación y sus funciones pptLa educación y sus funciones ppt
La educación y sus funciones ppt
 
Funcion Social de la Educacion
Funcion Social de la EducacionFuncion Social de la Educacion
Funcion Social de la Educacion
 
Las funciones sociales de la escuela
Las funciones sociales de la escuelaLas funciones sociales de la escuela
Las funciones sociales de la escuela
 

Semelhante a Zend framework 2

Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
Stepan Tanasiychuk
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
drupalconf
 

Semelhante a Zend framework 2 (20)

UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
php frameworks
php frameworksphp frameworks
php frameworks
 
JSSDK: Начало
JSSDK: НачалоJSSDK: Начало
JSSDK: Начало
 
Console application with ZF 2.0
Console application with ZF 2.0Console application with ZF 2.0
Console application with ZF 2.0
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
RequireJS і Magento 2
RequireJS і Magento 2RequireJS і Magento 2
RequireJS і Magento 2
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Deep Dive in Magento DI
Deep Dive in Magento DIDeep Dive in Magento DI
Deep Dive in Magento DI
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 

Último

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 

Último (9)

Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 

Zend framework 2

  • 2.
  • 3. Руководитель группы разработчиков MTV Entertainment в EPAM Systems  PHP Skill Manager в EPAM Systems
  • 4. Enrico Zimuel  ZF core developer  ZFConf 2012
  • 5. Обзор ZF2  Новая система Autoloading  Dependency Injection  Event manager  Новый MVC  Быстрый старт: ZendSkeletonApplication  Система пакетов (packages)  От ZF1 к ZF2
  • 6.
  • 7. Новая архитектура (MVC, DI, Events)  >= PHP 5.3  Отменен CLA (Contributor License Agreement)  Git (GitHub) вместо SVN  Улучшенная производительность  Модульность  Система пакетов (packages)
  • 8. Подход ZF1:  Singleton  Registry  Hard-Coded Dependencies  Подход ZF2:  Aspect Oriented Design  Dependency Injection
  • 9. Методологии  Уменьшение связанности кода (ZendDi)  Событийность (ZendEventManager)  Стандартные классы (ZendStdlib)  Используются возможности PHP 5.3  Namespace  Лямбда функции и замыкания  Лучшая производительность
  • 10.
  • 11. Никаких require_once  Множество подходов:  Стиль ZF1: include_path autoloader  Autoloading по префиксу или неймспейсу  Class-map autoloading
  • 12. Генерация .classmap.php из командной строки: bin/classmap_generator.php  Usage is trivial: $ cd your/library $ php /path/to/classmap_generator.php -w
  • 13. Class-Maps дают 25% прироста по сравнению ZF1 autoloader без акселерации, 60-80% прироста, если используется кэширование опкода  Связывание неймспейсов/префиксов с путем дает >10% прироста производительности без акселерации, 40% - с кэшированием опкода Note: новый autoloading доступен в ZF 1.12
  • 14.
  • 15. Как управлять зависимостями между объектами?  Dependency injection (DI) это шаблон проектирования, который снижает связанность между компонентами программы
  • 16. class Foo { protected $bar; … public function __construct() { $this->bar= new Bar(); } … }
  • 17. class Foo { protected $bar; … public function __construct(Bar $bar) { $this->bar = $bar; } … }
  • 18. class Foo { protected $bar; … public function setBar(Bar $bar) { $this->bar = $bar; } … }
  • 19. WITHOUT DI WITH DI (CONSTRUCT) Недостатки: Преимущества:  Сложно тестировать  Легко тестировать  Нет изоляции  Низкая связанность  Сложность повторного  Гибкая архитектура использования
  • 20. Поддерживает 3 типа инъекций:  Constructor  Interface  Setter  Реализует DI Container:  Управление зависимостями с помощью конфигураций и аннотаций
  • 21. $definition = array( 'Foo' => array( 'setBar' => array( 'bar' => array( 'type' => 'Bar', 'required' => true, ), ), ), );
  • 22. use ZendDiDi, ZendDiConfiguration; $di = new Di; $config = new Configuration(array( 'definition' => array( 'class' => $definition ) )); $config->configure($di); $foo = $di->get('Foo'); // contains Bar!
  • 23. namespace Example { use ZendDiDefinitionAnnotation as Di; class Foo { public $bar; /** * @DiInject() */ public function setBar(Bar $bar){ $this->bar = $bar; } } class Bar { } }
  • 24. $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!
  • 25.
  • 26. Event Manager – объект, агрегирующий слушателей для одного или нескольких событий, а также вызывающий события  Listener – callback, реагирующий на события – слушатель.  Event – это действие
  • 27. 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);
  • 28.
  • 29. Bootstrap, route, dispatch, response…  В MVC ZF2 все является событием
  • 30. Базовый блок в ZF2 MVC приложении это модуль  Модуль это коллекция кода и других файлов, которые решают специфическую атомарную задачу большой бизнес задачи  Модуль это:  Namespace  Module.php
  • 31.
  • 32. Простой скелет приложения, использующий ZF2 MVC и модульную систему  Работает на ZF2.0.0beta4  Весь на код на GitHub, submodules… git clone –recursive git://github.com/zendframework/ZendSkeletonApplication.git
  • 33.
  • 34.
  • 35. ... 'router' => array( 'routes' => array( ... ), ), 'controller' => array( 'classes' => array( 'index' => 'ApplicationControllerIndexController' ), ), 'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', ), ...
  • 36. namespace ApplicationController; use ZendMvcControllerActionController, ZendViewModelViewModel; class IndexController extends ActionController { public function indexAction() { return new ViewModel(); } }
  • 37. Легко переносить модули:  Скопировать в папку module (или vendor)  Подключить модуль в application.config.php  Скопировать конфиг модуля в /config/autoload/module.<name>.config.php
  • 38.
  • 39.
  • 40. 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>
  • 41.
  • 42. Переход с минимальной переписью кода  Основные шаги  Namespace: Zend_Foo => ZendFoo  Exceptions: Zend_Exception больше нет (интерфейс для каждого компонента)  Autoloading: 3 варианта (ZF1 включительно)  MVC: модули, события
  • 44. 2 марта 2012 – ZF2 beta 3 released  22 мая 2012 – ZF2 beta 4 released  Travis CI integration  Composer support (http://packagist.org/)  ZF2 beta 5?  Релиз? «Начало лета»?
  • 45. 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
  • 46. Email: as@extrascript.com • Skype: aliaksandr.simanovich • Twitter: simanjan • Blog: simanovich.info