Zend Framework to jeden z najpopularniejszych frameworków PHP, który poznawałem jako jeden z pierwszych. Z wersji na wersję przybywało w nim funkcjonalności, zamieniając go ze zbioru luźno związanych komponentów w pełnoprawny framework MVC (z małym przymrużeniem oka). Od ponad roku programiści z niego korzystający czekają na wersję oznaczoną numerem 2, która ma przywrócić blask nieco zaśniedziałej chwały. Czy to się uda? Ciężko stwierdzić. Obecnie mamy możliwość sprawdzenia jak sobie radzi trzecia beta Zend Frameworka 2. Niestety dokumentacja jest tak samo kiepska jak w przypadku ZF 1 i większość informacji musimy wyszukiwać w sieci lub kodzie.

Co się zmieniło? Wszystko. Jeśli znacie aktualna wersję Zend Frameworka, to i tak będzie musieli uczyć się go na nowo, a aplikacje napisane w oparciu o pierwszą wersję, nie będą działać z wersją drugą. Jest tak dlatego, ponieważ ZF 2 został podzielony na moduły, które w pierwszej wersji były traktowane po macoszemu. Od drugiej wersji każdy moduł, to niezależny byt, który można bez żadnego problemu wyjąć z jednej aplikacji i wstawić do innej. Co więcej, moduły można pakować do archiwum phar, przez co ich utrzymanie i użycie będzie jeszcze prostsze.
Moduły stały się pojemnikami na wszystko co chcemy zamknąć w obrębie jednej przestrzeni nazw. I tak, moduł może zawierać specyficzne biblioteki, zasoby (css, javascript, pliki graficzne), całą aplikację MVC, konfigurację – wszystko jest niezależne od innych modułów. Pozwoli to na budowanie klocków, z których będzie można tworzyć modułowe aplikacje.

Spore zmiany zaszły również w obsłudze requestu od momentu jego przesłania do aplikacji, do wygenerowania odpowiedzi. Pamiętacie jak to wyglądało w ZF 1? Pluginy, action helpery, metody w kontrolerze, boostrap i cała magia z tym związania. W ZF 2 już tego nie ma. Teraz mamy eventy, przy pomocy których możemy podpiąć się pod większość etapów obsługi żądania. Od strony programisty za wiele się nie zmieni. I tak trzeba napisać kod, który robi coś w określonym momencie, ale od strony “bebechów”, twórcy ZF 2 odwalili kawał dobrej roboty.

Podobnie wygląda sprawa wstrzykiwania zależności. Z wierzchu nie widać za bardzo co się zmieniło, ponieważ nadal musimy bawić się wielowymiarowymi, zagnieżdżonymi tablicami przekazywanymi do jakiegoś obiektu. Jednak jeśli zajrzymy pod maskę, znajdziemy coraz popularniejsze w PHP DI (dependency Injection). Podobnie jak w przypadku eventów, DI również zostało dobrze przemyślane.

Kolejną sporą zmianę zauważymy w widoku. Teraz akcja kontrolera zwraca obiekt typu ViewModel, który odpowiedzialny jest za ustawienie szablonu, pliku widoku i przekazanie zmiennych. Ciekawie wygląda opcja zagnieżdżania, pozwalająca osadzić jeden ViewModel wewnątrz innego, co w rezultacie pozwoli na wpływanie na zawartość dowolnego elementu szablonu.

Przejrzałem Zend Frameworka 2 dosyć pobieżnie, przebrnąłem przez Quick Start i stworzyłem kilka modułów w ramach treningu, jednak już teraz mogę powiedzieć, że szykuje się nam porządnie wykonany framework. Nie przeprowadzałem żadnych testów wydajnościowych, w końcu cały czas mamy do czynienia z betą, obawiam się jednak, że ZF 2 może być wolniejszy od swojego poprzednika. Jest to mocno subiektywne odczucie i nie powinniście się nim sugerować podczas wybierania frameworka. Ogromnym plusem ZF 2 jest podzielenie wszystkiego na niezależne moduły, co na pewno przyczyni się do powstania ogromnej bazy paczek podobnych do gem-ów powszechnie wykorzystywanych w Railsach. Przynajmniej taką mam nadzieję. Ile poczekamy na stabilną wersję ZF 2? Nie wiem. Zgaduję, że chłopaki czekali na PHP 5.4 i w jednej z kolejnych wersji beta zobaczymy rozbudowany komponent Zend_Tool, pozwalający na uruchomienie aplikacji opartej na ZF 2 bez konieczności posiadania jakiegokolwiek serwera. Nieważne jaka by nie była przyczyna opóźnień, czekam na finalną wersję z niecierpliwością.