Some of posts from this blog has been moved to dywicki.pl. You will be automatically redirected to new blog if you would submit comment.
New posts are published on dywicki.pl, this blog contains old content and it is not continued.

Niektóre posty z tego bloga zostały przeniesione do dywicki.pl. Zostaniesz automatycznie przekierowany jeśli bedzięsz chciał dodać komentarz.
Nowe posty sa publikowane na dywicki.pl, ten blog zawiera stare treści i nie jest kontynuowany.

Zend Framework-MVC dalekie jest mu

Filed under Framework,MVC,PHP by

Zaprawdę, zaprawdę powiadam Wam drodzy czytelnicy Zend Framework do pełnej implementacji MVC ma jeszcze bardzo duży kwał drogi.

Dzisiejszego dnia postanowiłem poświęcić parę minut na bliższe spotkanie z ZF. Jak się szybko okazało nie był to czas spędzony bezowocnie. Utrwaliłem się w przekonaniu, że ZF to nie jest to czego szukam oraz znalazłem buga i to dość niewygodnego.. ;)

Dlaczego moje uprzedzenie do ZF nie zmalało a tylko wzrosło? Dlatego, że to co w sumie zobaczyłem odbiega od znanego mi (z innych frameworków) MVC. Może potraktuję Was tutaj odrobiną kodu:

< ?php

$view = new Zend_View();
$view->setScriptPath('./views/');
$view->a = 'asdf';
echo $view->render('example.php');
?>

Taki oto kawałek kodu jesteśmy smuszeni umieścić w kodzie akcji by uruchomić widok. Gdzie jest wygoda, automatyczne uruchamianie widoku? Nie wspomnę już o tym, że w ten sposób Zend znacząco ogranicza możliwości zmiany warstwy obsługującej widok.

Wzorowym rozwiązaniem dla mnie jest użycie Render’ów, które świetnie się spisują do tworzenia outputu. Nie czepiam się tutaj braku takich elementarnych rzeczy jak konfiruacja, której praktycznie nie ma. Być może ktoś stwierdzi, że można to sobie zaimplementować, ale przepraszam, po co biorę framework? Po to by jak najmniej implementować, by tworzyć logikę biznesową a nie rozszeżać framework.
Elementem, który został obsłużony w ZF niecodziennie są filtry. Są one traktowane jako pluginy. Może i dobrze, ale co oprócz filtrów może być wykonywane przed akcją?
Bardzo mnie boli brak konkretnego flowa, narzuconego z góry. Przyznam, że podoba mi się taki standard ponieważ przyzwyczaiłem się do tego korzystając z Mojavi i Symfony.
Komuś odpowiada swoboda? W kodzie nie ma miejsca na swobodę. Im więcej możliwych dróg tym więcej możliwych błędów. Babranie się w ścieżki i tak dalej, po co to komu? Po to by móc rozdzielać sobie aplikację na mniejsze “moduły” a te na jeszcze mniejsze akcje? Skoro tak to dlaczego Zend_Controler_Front nie działa w katalogu innym niż document root? Ano dlatego, że panowie, którzy pisali Zend_Controler_Router twarto stwierdzili, że ich adres jest stały i ma format /controller/action. A co w przypadku kiedy mam index.php/controller/action? Otóż moim kontrolerem nie będzie controller a index.php. Nasz adres ogranicza się tylko do REQUEST_URI, a to czy SCRIPT_NAME w nim się znajduje bądź jesteśmy w katalogu innym niż document root nie ma wpływu na działanie całości.

Co dziwne. Błąd (tak, to jest wcześniej wspomniany błąd) tkwi w repozytorium od początku, to znaczy od 26 marca, kiedy to [chyba] pierwsza wersja ZF pojawiła się na SVN. Nie muszę chyba przypominać, że w M4 takich wpadek nie ma? ;)
Bardzo wstrętny bug (który zgłosiłem), tym bardziej, że nie trafiłem jeszcze na oprogramowanie, które by leżało u mnie bezpośrednio w document roocie. Zwykle jest tak, że jak coś ściągam to wrzucam do podkatalogu i w nim prowadzę testy. By te testy przeprowadzić z ZF musiałem nieco się namęczyć.

Mam więcej uwag co do samego Zenda, ale o tym w kolejnej notce.. Jeśli ktoś szuka porządnej implementacji MVC, zapraszam do zapoznania się z notką Mojavi 4, z bliska.

2 responses so far

2 Responses to “Zend Framework-MVC dalekie jest mu”

  1. Wojtek says:

    Piszesz głupoty nic takiego nie trzeba robić… Zend domyślnie automatycznie szuka widoku w katalogu views/nazwakontrolera/nazwaakcji.php. Jeśli chcesz gdzie indziej wystarczy że dodasz w bootstrap w Zend_Layout::startMvc odpowiednią ścieżkę i taka będzie już implementowana wszędzie…

    Dziwny z Ciebie programista jeśli już po jednym dniu wszystko wiesz o danym frameworku… Podejrzewam że nawet nie przejrzałeś tutoriala umieszczonego na stronie zenda… :/

  2. Wojtek Zwróć proszę uwagę, że nota ta powstała ponad 2 i pół roku temu. ZF wówczas był zlepkiem … nie powiem czego. Wówczas kod ten brałem bezpośrednio z tutoriala. To o czym mówisz – wystarczy zmienić coś w Zend_Layout – takie rozwiązania były trendy w czasach Mojavi 2.0, czyli nie przymierzając jakieś 6, może 7 lat temu. W nowożytności wymyślono coś takiego jak pliki konfiguracyjne i tego się trzymajmy. Co to za narzędzie które muszę składać sam do kupy robiąc np:

    <?php Zend_Layout::startMvc(new Zend_Config_File('aaa')); ?>

    Swoją drogą złym pomysłem jest używanie statycznych wywołań jako sposobu na konfigurację. W dobrze zaprojektowanym frameworku wywołań statycznych będzie tylko parę, w ZF rodzi się ich mnóstwo. Inicjuje się rdzeń a reszta leci sama z automatu. Coś kosztem czegoś – komponenty są niezależne od siebie więc lecą na globalnych instancjach i ustawieniach – stąd wywołania na rzecz klas a nie obiektów (mam nadzieję że rozumiesz o co mi chodzi). Pomyłką jest umieszczanie i używanie w kodzie czegoś takiego jak Zend_Registry – nic innego jak zmienna globalna – z tym że zamiast global $bar w deklaracji funkcji robisz Zend_Registry::get(‘bar’);

    ZF nie zmienił się zbytnio od tych 2 lat. Wciąż jest rozsypką. Prawdziwa potęga frameworków tkwi w tym by pisać możliwie najmniej kodu PHP. Filozofia Zenda jest widocznie inna. Jak do czegoś takiego jak ZF dodać scaffolding?

Leave a Reply