Статьи

Что нового в Zend Framework 2

Когда я начал писать для SitePoint, одна из моих первых статей была о Zend Framework. С тех пор фреймворк выпустил стабильную версию 2. Помимо названия, версия 2 действительно новый проект по сравнению со старой версией; ZF был полностью переписан. В этой статье я дам вам обзор новых функций и внесенных изменений.

Упаковочная система

У вас есть до четырех разных способов получить ZF2. Первый — классический способ загрузки одного из пакетов, доступных на странице загрузки веб-сайта или по адресу packages.zendframework.com . Второй аналогичен, но вы можете скачать его из репозитория ZF GitHub . Третье — использование Composer , инструмента для управления зависимостями. Чтобы установить ZF2 с помощью Composer, добавьте следующие строки в ваш файл composer.json :

 "repositories": [ { "type": "composer", "url": "https://packages.zendframework.com/" } ], "require": { "zendframework/zend-config": "2.0.*", "zendframework/zend-http": "2.0.*" } 

Четвертый метод — использовать PEAR2_Pyrus, выполнив следующие команды:

  pyrus.phar.
 pyrus.phar.  channel-Discover packages.zendframework.com
 pyrus.phar.  установить zf2 / Zend_Framework # Standard 

Для версии 2 ZF разработала и выпустила базовое скелетное приложение, чтобы вы могли начать работу, с которой вы можете начать разработку самостоятельно. Вы можете скачать его с GitHub или с помощью Composer:

  composer.phar create-project --repository-url = "http://packages.zendframework.com" zendframework / путь к скелетному приложению / к / установить 

Система автозагрузки

ZF2, кажется, предоставляет вам множество различных альтернатив для каждой новой функции. Система автозагрузки, например, теперь имеет три разных варианта. Вы увидите, что нет никаких следов строк require_once , которые интенсивно использовались в первой версии. Конечно, для включения новой системы автозагрузки требуется один require_once , тот, что используется для автозагрузчика. Код для использования должен выглядеть следующим образом:

 <?php require_once 'Zend/Loader/StandardAutoloader.php'; $autoLoader = new ZendLoaderStandardAutoloader(array( 'fallback_autoloader' => true, )); $autoLoader->register(); 

Этот метод загружает классы пространств имен с использованием стандарта PSR-0 (большое обсуждение PSR-0 было написано Хари К.Т. в его статье, озаглавленной « Автозагрузка в PHP и стандарт PSR-0» ). Обратите внимание, что установка 'fallback_autoloader' => true включает откат, который позволяет вам вызывать систему включения по умолчанию PHP для включения тех файлов, которые не попадают в пространство имен Zend.

Второй метод основан на карте классов, файле с ассоциативным массивом, где ключи — это имена классов, а значения — их абсолютный путь. Поскольку карта классов представляет собой простой файл, который возвращает абсолютные пути, этот метод может быть быстрее по сравнению с предыдущим, до 20% при его стандартном использовании или до 80% при использовании системы кэширования кода операции, такой как APC. В этой системе утомительно создание самого файла карты, особенно для крупных проектов. К счастью, команда ZF создала генератор карт классов, который может автоматически построить карту для вас. По умолчанию он будет искать файлы в текущем каталоге и записывать результаты в файл, созданный по указанному пути. Пример его использования:

  php classmap_generator.php Мой / Проект 

Однако вы можете настроить скрипт. Для обзора доступных опций взгляните на документацию генератора карт классов .

Третий метод очень похож на первый. Что изменится в этом случае, так это то, что вы можете указать путь к файлам, используя данное пространство имен, как в примерах ниже.

 <?php require_once 'Zend/Loader/StandardAutoloader.php'; $autoLoader = new ZendLoaderStandardAutoloader(); $autoLoader->registerNamespace('ApplicationNamespace', 'Path/to/files'); $autoLoader->register(); 

Или вы можете установить конкретный префикс.

 <?php require_once 'Zend/Loader/StandardAutoloader.php'; $autoLoader = new ZendLoaderStandardAutoloader(); $autoLoader->registerNamespace('FilesPrefix_', 'Path/to/files'); $autoLoader->register(); 

Система зависимостей

Разработчики попытались написать код таким образом, чтобы он был максимально разделен, и для достижения этой цели была разработана новая версия после Inversion of Control (IoC). Как утверждает Википедия , IoC — это «метод программирования, выраженный в терминах объектно-ориентированного программирования, в котором связывание объектов во время выполнения связано с объектом-ассемблером и обычно не известно во время компиляции с использованием статического анализа». Для хорошего объяснения по этой схеме я предлагаю вам взглянуть на статью Алехандро Гервасио « Инверсия контроля — Голливудский принцип» .

Менеджер по корпоративным мероприятиям

Последняя функция, которую я хотел бы обсудить в этой статье, — это новый Event Manager, реализованный классом ZendServiceManager который заменит компонент ZendApplication предыдущей версии 1.x. Фактически, ZF2 теперь управляется событиями. Как вы, возможно, уже знаете, перед тем как запустить действие контроллера, фреймворк делает много вещей. Первый — запустить загрузчик, который устанавливает модули и конфигурацию приложения. После начальной загрузки URL-адрес, запрошенный пользователем, анализируется для правильной маршрутизации приложения (обычно модуль / контроллер / действие), а затем запускает диспетчер. На каждом из этих шагов у вас есть набор событий, которыми вы можете управлять практически любым способом, которым вы хотите изменить поток приложения.

Вы можете добавлять события через метод attach() класса EventManager . Он принимает имя события для прослушивания, функцию обратного вызова, вызываемую при возникновении события, и (необязательный) параметр, который указывает приоритет события. Последнее задается положительным целым числом, которое по умолчанию равно 1. Чем выше число, тем выше приоритет и раньше выполнение.

Событие может быть EventManager с помощью метода trigger() который также принадлежит EventManager . Его параметрами являются имя инициируемого события, контекст, который обычно является экземпляром объекта, у которого есть событие (или ноль, если вы используете анонимную функцию), и массив, содержащий параметры для передачи в обработчик события. Простым примером является следующее:

 <?php // Attach the handler $event = new EventManager(); $event->attach( 'myEvent', function($event) { $parameters = $event->getParams(); echo 'The given name is ' . $parameters['name'] . ' ' . $parameters['surname']; }, 100 ); // Fire the event $parameters = array('name' => 'Aurelio', 'surname' => 'De Rosa'); $event->trigger('myEvent', null, $parameters); 

Выводы

В этой статье вы узнали об основных изменениях в Zend Framework 2. Подводя итог, я рассмотрел следующие ключевые моменты:

  • Новая система упаковки, основанная на composer и pyrus, для загрузки и установки
  • Новая архитектура MVC на основе событий
  • Лучшая производительность
  • Новая система автозагрузки классов
  • ZF2 использует несколько новых шаблонов проектирования, таких как Event Manager и Dependency Injection, которые помогают вам отделить ваш код

Вы можете быть поражены всеми этими изменениями, и я думаю, что это не так странно из-за широкого спектра новых функций и улучшений, которые были представлены. На самом деле, эта статья просто скользит по поверхности. Не стесняйтесь загружать копию структуры и исследовать.

Изображение через Fotolia