Pull to refresh

Zend Framework 2 — долгожданные усовершенствования в Controller и View

Reading time4 min
Views13K
image На днях попробовал новый ZF2. Перечитал кучу материала, собрал по их туториалу простенький сайтик. И когда дошел до создания Action'а и View'хи то пределу моей радости не было границ. Передача переменных во view теперь осуществляется через return, и они стали локальными (никакого $this->param). Только ради этого усовершенствования я готов уже сейчас переходить на ZF2, несмотря на то что он в бете.

Под катом вас ожидает: коротенько о новшествах, о производительности и об изменениях касательно контроллера и шаблонов вьюхи.


Новшества ZF2, о которых говорят все:

  • улучшена производительность
  • используются более гибкие подходы, улучшения в стандартизации и унификации
  • переработана модель работы с плагинами
  • повсеместное использование namespace'ов
  • больше никаких вызовов require_once внутри компонент (всё через автолоадер)
  • 2 новых основополагающих компонента Dependency Injection и EventManager (DI вещь бесспорно классная, но пугает своей магией установки параметров в объекты по названию переменных в методах. Обычно такая магия негативно сказывается на производительности. EventManager удобная штука. Логирование, кеширование, пре- и пост-обработка данных теперь на высшем уровне)
Разработчики постарались и сделали достойный ZendSkeletonApplication — это простой скелет приложения, использующий слой ZF2 MVC и модули системы. Скелет использует свободный инструментарий css и html от твиттера. Получаем симпатичный web2.0 сайтик из одной странички, который легко раздуть до полноценного сайта.

Касательно производительности 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 и создадите тестовый модуль «альбом».
Tags:
Hubs:
+26
Comments59

Articles

Change theme settings