
Под катом вас ожидает: коротенько о новшествах, о производительности и об изменениях касательно контроллера и шаблонов вьюхи.
Новшества ZF2, о которых говорят все:
- улучшена производительность
- используются более гибкие подходы, улучшения в стандартизации и унификации
- переработана модель работы с плагинами
- повсеместное использование namespace'ов
- больше никаких вызовов require_once внутри компонент (всё через автолоадер)
- 2 новых основополагающих компонента Dependency Injection и EventManager (DI вещь бесспорно классная, но пугает своей магией установки параметров в объекты по названию переменных в методах. Обычно такая магия негативно сказывается на производительности. EventManager удобная штука. Логирование, кеширование, пре- и пост-обработка данных теперь на высшем уровне)
Касательно производительности ZF2
- за счёт новых автолоадеров, Class Map даёт до 85% улучшения производительности по сравнению с ZF1
- использование namespace'ов до 40% (сперва думал, что это незначительная плюшка в PHP5.3 и носит чисто эстетический характер)
- уменьшено кол-ва вызовов при использовании плагинов (7 вызовов вместо 13, думаю можно говорить о двукратном ускорении)
- рефакторинг MVC (должно точно дать ощутимый прирост производительности. На порядок улучшилось удобство использования.)
Долгожданные усовершенствования в Controller и View
Наконец-то, совершилось! В action-контроллерах передача переменных перестала быть магией. Вместо некрасивых $this->view->..., теперь action должен возвращать ассоциативный массив с данными для вьюхи. Приведу примеры для сравнения.
Было ZF1:
public function indexAction()
{
$this->view->albums = $this->albumTable->fetchAll();
$this->view->user = 123;
$this->view->text = 'any <html> it will not be automatically escaped in view';
}
Стало ZF2:
public function indexAction()
{
return array(
'albums' => $this->albumTable->fetchAll(),
'user' => 123,
'text' => 'any <html> it will be automatically escaped in view',
);
}
View шаблоны тоже преобразились в лучшую сторону. Переменные стали локальными (доступны по их названию), а хелперы остались доступны через $this->helper(). Все строковые переменные автоматически эскейпятся, во избежании XSS. Массивы и объекты остаются без изменений, поэтому при выводе из них значений необходимо пропускать через $this->escape();
Писать и читать код стало удобнее.
Было ZF1:
<?php
$this->headTitle('My albums');
?>
<?php
foreach($this->albums as $album) {
// some code
}
?>
<?php
echo $this->escape($this->text);
?>
Стало ZF2:
<?php
// хелперы всё также доступны через $this
$this->headTitle('My albums');
?>
<?php
// альбомы из action'а из примера выше стали доступны через локальную переменную
foreach($albums as $album) {
// some code
}
?>
<?php
// нет необходимости вызывать escape, все скалярные значения автоматом эскейпятся
// массивы и объекты пропускаются и во view попадают как есть
echo $text;
?>
На мой взгляд это самое «вкусное» усовершенствование в ZF2.
Как попробовать и что почитать
Zend Framework 2 находится в состоянии beta. Где-то видел, что stable release будет весной 2012. Но использовать на свой страх и риск его можно уже сейчас.
Обязательно ставьте последний PHP 5.3.8. На PHP 5.3.2 у меня выскакивала ошибка Strict Standart.
Под виндой мне пришлось ставить новый апач 2.4 скомпилированный под VC9. Качать PHP x86 TS VC9 отсюда, экстеншены apc и mongo отсюда, php_xdebug.dll подобрать на официальном сайте отправив в формочке свой phpinfo.
В первую очередь прочтите хорошую статью на русском «Zend Framework 2. Материалы для изучения» на сайте tokarchuk.ru.
Потом воспользуйтесь замечательным туториалом Getting Started with Zend Framework 2 (PDF, en), с помощью которого вы за час-два установите ZF2 и создадите тестовый модуль «альбом».