Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zend Framework 2 opinie
Forum PHP.pl > Inne > Hydepark
viking
Jako że niedawno nastąpiła premiera ZF2 i coś tak bez żadnego echa przeszła na forum chciałbym was zapytać jak się na ten nowy framework zapatrujecie? Ja śledzę od dłuższego czasu postępy prac i wprowadzane zmiany i szczerze mówiąc mam ochotę przejść na Symfony2 po wydaniu wersji finalnej (tym bardziej że kiedyś napisałem małą aplikację na Silex i wspominam bardzo miło). Całość jest przekombinowana. Rzeczy do tej pory proste w pisaniu to teraz cała masa nadmiarowego kodu w sporej części wynikłego z ogólnych wad PHP, a zwłaszcza skopanych maksymalnie namespace'ów. Złe wrażenie sprawia też marna dokumentacja, póki co w sporej części wygląda jak copy-paste kodu frameworka.
ixox
Przejrzałem nowego Zend Frameworka i wydaje mi się strasznie przekombinowany. Jak widzę to konfigurację na tablicach wielowymiarowych to aż coś mi się dzieje. Zdefiniowanie zwykłego routingu jest skomplikowane. A o podpowiedzi kody nie ma mowy, ponieważ są to tablice.
  1. 'router' => array(
  2. 'routes' => array(
  3. 'album' => array(
  4. 'type' => 'segment',
  5. 'options' => array(
  6. 'route' => '/album[/:action][/:id]',
  7. 'constraints' => array(
  8. 'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
  9. 'id' => '[0-9]+',
  10. ),
  11. 'defaults' => array(
  12. 'controller' => 'Album\Controller\Album',
  13. 'action' => 'index',
  14. ),
  15. ),
  16. ),
  17. ),
  18. ),

Też się zastanawiam nad Symfony2. Ktoś kiedyś napisał, że w Symfony2 jest skomplikowany routing ale w porównaniu z Zendem jest jasny i przejrzysty.
  1. blog_show:
  2. pattern: /blog/{slug}
  3. defaults: { _controller: AcmeBlogBundle:Blog:show }

To tylko jeden przykład, a znalazło by się jeszcze kilka.
Może się coś zmieni. Nie wiecie może czy będzie coś takiego jak Zend_Tool?
Szymciosek
Dokładnie tak wygląda routing w Symfony, ten przykład akurat dotyczy routingu w YAML, a jest jeszcze w XML, PHP oraz Adnotacjach.
Spawnm
Oba frameworki są przekombinowane ;d
W symfony routing też potrafi wyglądać na skomplikowany:
  1. use Symfony\Component\Routing\RouteCollection;
  2. use Symfony\Component\Routing\Route;
  3.  
  4. $collection = new RouteCollection();
  5. $collection->add('homepage', new Route('/articles/{culture}/{year}/{title}.{_format}', array(
  6. '_controller' => 'AcmeDemoBundle:Article:show',
  7. '_format' => 'html',
  8. ), array(
  9. 'culture' => 'en|fr',
  10. '_format' => 'html|rss',
  11. 'year' => '\d+',
  12. )));
  13.  
  14. return $collection;

Ale teraz jest na to moda wink.gif
Szymciosek
Pewnie można to załatwić łatwiejszym sposobem, są do wyboru w końcu 4.
Spawnm
Da się, w YAML będzie to:
  1. article_show:
  2. pattern: /articles/{culture}/{year}/{title}.{_format}
  3. defaults: { _controller: AcmeDemoBundle:Article:show, _format: html }
  4. requirements:
  5. culture: en|fr
  6. _format: html|rss
  7. year: \d+

Co w sumie jest równie skomplikowane.

Po dokładnym przyjrzeniu się routingowi zenda muszę powiedzieć że jednak jest fajny smile.gif
Szymciosek
Do każdego da się przyzwyczaić jaki by nie był wink.gif
usb2.0
Adnotacje są spoko, może trochę wiecej kodu w kontrolerze wyjdzie jak dużo akcji jest, ale wszystko w jednym pliku, jak się nazwe akcji zapomni nie trzeba latać do pliku z routingiem:P
yaml wg w symfony 2 tylko do configu i może validatorów
viking
I oprócz tego że routing Zenda wygląda na mocno skomplikowany dalej mu trochę brakuje. Np translated routes ma się pojawić dopiero ponownie w v2.1. Widziałem też że już ludzie narzekają na błędy (których całe mnóstwo w dalszym ciągu jest) i braki. To nie wygląda niestety jeszcze jak finalny produkt. Pewnie z pół roku będzie trzeba odczekać przed zastosowaniem produkcyjnym. Śmieszne jest to że kiedyś rozmawiałem z O'Phinney'em o DI i też mu zwróciłem uwagę że to jest przekombinowana kobyła którą ciężko będzie zrozumieć i używać i mimo że bronił swego stanowiska to jednak zrobił testy. I co się okazało? Że 90% czasu generowania strony zabierał właśnie DI. Jak coś wygląda na skomplikowane i są problemy żeby to ogarnąć można mieć pewność że coś jest nie tak i przełoży się to na jakość kodu.
everth
A jak tam sprawa z wydajnością? Na blogach pisali że beta ZF2 potrafiła być dwa razy wolniejsza od jedynki. Jak się to ma teraz? Symfony2 w końcu jest jednak szybsze od poprzednika.
Pilsener
Przecież nikt nie każe korzystać z tablic wielowymiarowych, można użyć .ini, .xml albo pracować na obiektach używając metod ->set.... (podobnie jest zresztą z formularzami)

I nie dogodzisz, albo ciągłe narzekanie, że nie ma tego czy tamtego a jak jest prawie wszystko to nagle system staje się przekombinowany, kolos na glinianych nogach etc. smile.gif
marcio
Cytat(Spawnm @ 8.09.2012, 11:26:58 ) *
Da się, w YAML będzie to:
  1. article_show:
  2. pattern: /articles/{culture}/{year}/{title}.{_format}
  3. defaults: { _controller: AcmeDemoBundle:Article:show, _format: html }
  4. requirements:
  5. culture: en|fr
  6. _format: html|rss
  7. year: \d+

Co w sumie jest równie skomplikowane.

Po dokładnym przyjrzeniu się routingowi zenda muszę powiedzieć że jednak jest fajny smile.gif

A co w tym jest skomplikowanego?

Ogolnie jak dla mnie Symfony2 bije zenda2 o przynajmniej 2 glowy.Oprocz tego ze korzysta twig-a tak jak Django to ma tez kilka innych podobizn.
Szymciosek
Cytat(marcio @ 9.09.2012, 01:07:48 ) *
A co w tym jest skomplikowanego?

Ogolnie jak dla mnie Symfony2 bije zenda2 o przynajmniej 2 glowy.Oprocz tego ze korzysta twig-a tak jak Django to ma tez kilka innych podobizn.



Powiedz coś więcej na temat przewagi Symfony2 nad Zendem. Chętnie się czegoś dowiem ciekawego.
!*!
Cytat(ixox @ 8.09.2012, 09:37:18 ) *
  1. 'router' => array(
  2. 'routes' => array(
  3. 'album' => array(
  4. 'type' => 'segment',
  5. 'options' => array(
  6. 'route' => '/album[/:action][/:id]',
  7. 'constraints' => array(
  8. 'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
  9. 'id' => '[0-9]+',
  10. ),
  11. 'defaults' => array(
  12. 'controller' => 'Album\Controller\Album',
  13. 'action' => 'index',
  14. ),
  15. ),
  16. ),
  17. ),
  18. ),


Dlatego punkt dla każdego kto opracuje sobie własny wink.gif Zresztą zdawało mi się czy ZF, ... , chyba można w nim dobierać komponenty jak tylko się podoba, więc nie widzę problemu z wymianą/zamianą czegokolwiek na cokolwiek innego.

Albo ma się wybrakowany, ale funkcjonalny FW pisany pod kilka osób, albo ma się przeciążony kombajn ze wszystkim dla milionów. Kwestia wyboru czego potrzebujemy.
Już to napisałem w innym temacie, ale cieszy mnie dokumentacja jaką ktoś podlinkował w newsach... w końcu docZF ma ręce i nogi, aby móc się na spokojnie w tym połapać.

marcio - również chciałbym poczytać o tych przewagach S2 na ZF2, tylko szeroko proszę.
ShadowD
W obecnej chwili brak zend_tool czy czegoś w tym guście, cz w ostateczności jakiegoś gotowego projektu z podstawowymi (index/error) i jednym modułem by można było zacząć prace od razu a nie ctrl+c z dokumentacji robić. Jestem zwolennikiem zf'a i na chwilę teraźniejszą ciężko mi jest się w tym ogarnąć, choć przyznaję że z 1 jakimś wyjątkowo dobry nie byłem.
ixox
Podobno ma się pojawić takie narzędzie jak Zend_Tool. Szkoda że nie wypuścili go od razu. Czas pokaże smile.gif
marcio
Zacznijmy od tego ze routing jest prosty a zatem bardzo elastyczny do tego ma fajne opcje jak Request za pomoca ktorej opisujemy czy kontroler ma sie odpalic dla zadanie Get/Post bardzo przydatna funkcjonalnosc.

Twig jest super sprawa znam go juz z django i bardzo go sobie chwale.Jest prosty w nauce i pozwala dziedziczyc sobie widoki czego implementacja widokow symfony2 w PHP nie ma(z tego co pamietam).
Pisanie rozszerzen w twig-u to trudnych rzeczy nie nalezy, potrzebujemy uzyc jakiegos bundl-a w widoku piszemy sobie rozszerzenia i odpalamy jako funkcje w szablonie i woila!

Szybkosc symfony2 gdy mamy gotowa aplikacji i odpalimy ja w srodowisku produkcyjnym to chodzi jak burza.

Bundle wspaniala rzecz, w symfony wszystko jest bundlem nawet nasza aplikacja(nie tylko jej osobne moduly).
Bundle sa latwe w stworzeniu i utrzymaniu.Architektura katalogow tez jest wporzadku latwo jest sie polapac co gdzie jest.

Tworzenie formularzy tez jest proste i intuicyjne.
Zeby spersonalizowac formularz nie uzywamy dekoratorow/behaviour tak jak to mialo miejsce np w zend/symfony 1.x(chyba).Wszystko dzieje sie widoku dziedziczymy po jakims elemencie formularza i go rozszerzamy jak chcemy.

Profiler jak przystalo sprawuje sie dobrze ale pamietam ze Kohana 2.x tez go miala wiec nie jest to jakis wynalazek.

Doctrine z poczatku trzeba sie przyzwyczaic bo nie wiedzialem o co kaman ale podoba mi sie.
Sprawa wykorzystywania klas Encji by pobierac/usuwac/edytowac wpisy z bazy danych tez jest dobrze przemyslana.o wiele lepiej sie to sprawuje niz pospolity Model.

security.yml w latwy sposob mozna sobie zabezpieczyc PA/kontrolery choc wedlug mnie latwo sie z tego nie korzysta to jednak jest to fajne rozwiazanie.

Tworzenie konfiguracji bundli tez jest latwe i przejrzyste.
Do tego tak jak w django kazdy bundle moze trzymac routing/konfiguracje we wlasnych plikach(czyli w katalogu bundla) i potem je include-owac do glownych plikow konfiguracyjnych.

Do tego mam dokumentacje w jezyku Wloskim wiec czego wiecej chciec chyba zadan Fw tego nie oferuje wink.gif

To tak na tyle.
Jest tez duzo wiecej innych rzeczy ktore teraz nie przychodza mi do glowy.

P.S nie zapominajac o tym ze w symfony2 mamy wszystko out-of-the-box bez wiekszej konfiguracji w kilka minut mamy juz dzialajacy fw
!*!
Co to w zasadzie jest/ma być ten Zend_Tool ?

Cytat
Szybkosc symfony2 gdy mamy gotowa aplikacji i odpalimy ja w srodowisku produkcyjnym to chodzi jak burza.

A w ZF czy innych to nie? Przecież od tego min. jest ten status wink.gif
marcio
Cytat(!*! @ 9.09.2012, 14:59:22 ) *
Co to w zasadzie jest/ma być ten Zend_Tool ?


A w ZF czy innych to nie? Przecież od tego min. jest ten status ;)

Tzn nie rozumiem?Status czego?
!*!
status == tryb uruchomienia aplikacji.
marcio
Chyba sie nie zrozumielismy chodzi mi o to ze Symfony2 w srodowisku finalowym jest szybkie nawet ze jest kobyla.
To ze inne fw oferuja taka opcje jak rozne srodowiska to ja wiem wink.gif
ShadowD
Pobrałem sobie aplikację rzekomo z tutoriala zend'a 2 i mam pytanie tutaj jest cała masa rzeczy jakie w zf 1.x były już "wbudowane" czy na prawdę to ma tak wyglądać, czy zawsze muszę mieć własny autoloader, czy za każdym razem muszę w configu samemu wpisywać kontrolery - to się robiło w 1.x jak by z automatu (istniał katalog to istniał kontroler) a tutaj jakieś śmieszne rzeczy wyczyniają nie komentując masy nadmiaru w plikach kontrolerów typu:
  1. namespace Application\Controller;
  2.  
  3. use Zend\Mvc\Controller\AbstractActionController;
  4. use Zend\View\Model\ViewModel;


Czy to już tak zostanie czy ja jestem nie ogarnięty bo na prawdę staram się zrozumieć zf 2 i mocno mi nie idzie, przecież w tym się nic napisać nie da, mój ide (phpdesigner) wariuje wręczy przy podpowiadaniu składni! Umie ktoś mi powiedzieć dlaczego to tak wygląda? :-)
ixox
Cytat(ShadowD @ 9.09.2012, 22:35:48 ) *
Pobrałem sobie aplikację rzekomo z tutoriala zend'a 2 i mam pytanie tutaj jest cała masa rzeczy jakie w zf 1.x były już "wbudowane" czy na prawdę to ma tak wyglądać, czy zawsze muszę mieć własny autoloader, czy za każdym razem muszę w configu samemu wpisywać kontrolery - to się robiło w 1.x jak by z automatu (istniał katalog to istniał kontroler) a tutaj jakieś śmieszne rzeczy wyczyniają nie komentując masy nadmiaru w plikach kontrolerów typu:
  1. namespace Application\Controller;
  2.  
  3. use Zend\Mvc\Controller\AbstractActionController;
  4. use Zend\View\Model\ViewModel;


Czy to już tak zostanie czy ja jestem nie ogarnięty bo na prawdę staram się zrozumieć zf 2 i mocno mi nie idzie, przecież w tym się nic napisać nie da, mój ide (phpdesigner) wariuje wręczy przy podpowiadaniu składni! Umie ktoś mi powiedzieć dlaczego to tak wygląda? :-)

W confingu będzie trzeba wpisywać za każdym razem. Dodajesz w ten sposób nowy moduł (tak samo jak w symfony2 bundle). W ZF2 Możesz sobie stworzyć kilka modułów, które można wykorzystać w innych aplikacjach.
Namespace (przestrzenie nazwa) deklaruję się po to aby można było używać kilku klas o tej samej nazwie i uniknąć błędu tym spowodowanego. Nie jestem w stanie dokładnie tego wytłumaczyć smile.gif http://php.net/manual/pl/language.namespaces.php
red.orel
  1. 'router' => array(
  2. 'routes' => array(
  3. 'album' => array(
  4. 'type' => 'segment',
  5. 'options' => array(
  6. 'route' => '/album[/:action][/:id]',
  7. 'constraints' => array(
  8. 'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
  9. 'id' => '[0-9]+',
  10. ),
  11. 'defaults' => array(
  12. 'controller' => 'Album\Controller\Album',
  13. 'action' => 'index',
  14. ),
  15. ),
  16. ),
  17. ),
  18. ),

  1. $id = (int) $this->params()->fromRoute('id', 0);

Czy taki jest ten cały framework do tworzenia frameworku?
viking
Cytat(ixox @ 9.09.2012, 23:31:19 ) *
Namespace (przestrzenie nazwa) deklaruję się po to aby można było używać kilku klas o tej samej nazwie i uniknąć błędu tym spowodowanego. Nie jestem w stanie dokładnie tego wytłumaczyć smile.gif http://php.net/manual/pl/language.namespaces.php


Aha,
  1. use Zend\Db\Exception\RuntimeException,
  2. Zend/Db\Adapter\Exception\RuntimeException


Ups, kolizja.
ixox
Cytat(red.orel @ 10.09.2012, 02:10:23 ) *
Czy taki jest ten cały framework do tworzenia frameworku?

?
Cały framework do tworzenia frameworku? Nie rozumiem.
Spawnm
Cytat(viking @ 10.09.2012, 07:13:49 ) *
Aha,
  1. use Zend\Db\Exception\RuntimeException,
  2. Zend/Db\Adapter\Exception\RuntimeException


Ups, kolizja.



  1. use Zend\Db\Exception\RuntimeException ,
  2. Zend/Db\Adapter\Exception\RuntimeException as AdapterRuntimeException



wink.gif
viking
Cytat(Spawnm @ 10.09.2012, 09:46:20 ) *
  1. use Zend\Db\Exception\RuntimeException ,
  2. Zend\Db\Adapter\Exception\RuntimeException as AdapterRuntimeException



wink.gif


Tylko widzisz. Zapierdzielasz jak jakiś upośledzony pełnymi ścieżkami na początku każdego pliku, dodając sobie od diabła roboty i do tego wielce prawdopodobne że się pomylisz przez użycie słowa kluczowego albo nazwy funkcji z globalnej przestrzeni PHP. Nawet jeśli mowa o dwóch różnych klasach to i tak musisz je aliasować no bo przecież dzięki namespece'om unikasz kolizji. Ten przykład wstawiłem specjalnie żeby pokazać jak idiotycznie rozbijane są klasy, akurat wyjątków. No ale super wypas, bo to jest lepsze niż "new Zend_Db_Exception_RuntimeException" gdzie autoloader sam rozwiążę ścieżkę która zarazem jest unikalnym identyfikatorem wink.gif A później niestety błędy języka przenoszą się na frameworki.
melkorm
Boże, ludzie .... odpaliliście raz ZF2 złapaliście się za głowę bo nic z niego na tę chwilę nie rozumiecie i wylewacie żale na forum ? biggrin.gif Bo właśnie tak to wygląda.

Nie mówię że jest proste, zresztą jak się nie podoba to zapraszam do innego FW smile.gif Zresztą temat o porównaniach FW mamy gdzie indziej a tu się zrobił mega offtopic.

1. Symfony używa Twiga z default'a - tutaj możesz sobie od razu bez problemu podłączyć https://github.com/mtymek/ZfTwig - nie widzę problemu.
2. Skomplikowana konfiguracja .... fakt na początku się także przestraszyłem jak wielu, to samo było przy ZF1 i każdym innym frameworku - standard, kwestia przyzwyczajenia.

Cytat
Pobrałem sobie aplikację rzekomo z tutoriala zend'a 2 i mam pytanie tutaj jest cała masa rzeczy jakie w zf 1.x były już "wbudowane" czy na prawdę to ma tak wyglądać, czy zawsze muszę mieć własny autoloader, czy za każdym razem muszę w configu samemu wpisywać kontrolery - to się robiło w 1.x jak by z automatu (istniał katalog to istniał kontroler) a tutaj jakieś śmieszne rzeczy wyczyniają nie komentując masy nadmiaru w plikach kontrolerów typu:


Własny autoloader - tak i nie, ale możesz mieć autoloader kontrolerów zachowujący się tak jak w ZF1. Więcej info tutaj I to nie są śmieszne rzeczy, autoloading_class_map używam od dawna wraz z composerem i nie mam żadnych problemów, oczywiście Zend1 kontrolery wczytuje poprzez Loader'a - nie stety, tutaj dostajemy jeszcze większą wolność, chcesz tak to masz tak chcesz lepiej i wydajniej to masz tak, zresztą jak w artykule jest podane - masz nawet od tego skrypt który zazwyczaj isę odpala przy wrzucaniu na produkcję smile.gif

  1. namespace Application\Controller;
  2.  
  3.  
  4.  
  5. use Zend\Mvc\Controller\AbstractActionController;
  6.  
  7. use Zend\View\Model\ViewModel;


o_O nadmiarowe rzeczy ? To chyba nie pisałeś czegoś większego z użyciem namespaceów gdzie u mnie przy większych klasach sięga to czasami 6-8 use'ów.
Zresztą, to są zwykłe use'y przyzwyczaj się smile.gif

Cytat
Tylko widzisz. Zapierdzielasz jak jakiś upośledzony pełnymi ścieżkami na początku każdego pliku, dodając sobie od diabła roboty i do tego wielce prawdopodobne że się pomylisz przez użycie słowa kluczowego albo nazwy funkcji z globalnej przestrzeni PHP. Nawet jeśli mowa o dwóch różnych klasach to i tak musisz je aliasować no bo przecież dzięki namespece'om unikasz kolizji. Ten przykład wstawiłem specjalnie żeby pokazać jak idiotycznie rozbijane są klasy, akurat wyjątków. No ale super wypas, bo to jest lepsze niż "new Zend_Db_Exception_RuntimeException" gdzie autoloader sam rozwiążę ścieżkę która zarazem jest unikalnym identyfikatorem A później niestety błędy języka przenoszą się na frameworki.


Takie rozłożenie jest moim zdaniem jak najbardziej słuszne, bo nadpisuje SPL'owe wyjątki co moim zdaniem jest super sprawą, bo mniej więcej po samym typu Exceptiona mogę rozpoznać przyczynę błędu i czy go złapać smile.gif No bo chyba wszyscy już znają całą rodzinę wyjątków SPL'a snitch.gif

  1. $id = (int) $this->params()->fromRoute('id', 0)

Napisz AbstractActionController swoim, dorzuć metodę proxy do tego i tyle tongue.gif

PS. Sorki za mały chaos ale się strasznie nie wyspałem wink.gif
ShadowD
@melkorm masz rację, ale zf2 w porównaniu do zf1 (sam szkielet aplikacji) po prostu straszy ilością rzeczy o jakich użytkownik nie musiał myśleć. Jednak większość zamian typu bootloader ładowany tylko w module, nowe widoki itd. są na prawdę przyjemne i dają się łatwiej ogarnąć niż w jedynce. :-)

Ps. Dzięki za linka.
melkorm
Cytat
@melkorm masz rację, ale zf2 w porównaniu do zf1 (sam szkielet aplikacji) po prostu straszy ilością rzeczy o jakich użytkownik nie musiał myśleć.


Ja zawsze wychodzę z założenia że jak nie muszę myśleć o czymś co działa w tle to zawsze przychodzi moment gdy się wywali i wtedy i tak musisz się dokładnie dowiedzieć jak to działa smile.gif Zresztą moim zdaniem to tylko złudzenie, zresztą konfiguracji wielokrotnie nie edytujesz, ewentualnie w pierwszych tygodniach życia projektu. A skrypty do releas'ów już i tak dawno mam popisane hooki GIT'a więc jakoś się tym nie przejmuję, jest to moim zdaniem koszt godny zapłacenia, gdzie w zamian dostajesz elastyczność i mam nadzieję wzrost wydajności, bo pomiaru stabilnego releas'u jeszcze nie ma, zresztą z tego co pamiętam mieli się na tym skupić w 2.1 albo 2.2, nie pamiętam smile.gif
erix
Cytat
Ja zawsze wychodzę z założenia że jak nie muszę myśleć o czymś co działa w tle to zawsze przychodzi moment gdy się wywali i wtedy i tak musisz się dokładnie dowiedzieć jak to działa

Tak, jak najbardziej.

Ale dużo lepiej i łatwiej się dowiadywać, gdy wszystko nie jest tak porozbijane. PHP, to nie Java, a nieraz mam wrażenie, że projektanci ZF(1|2) chyba o tym zapomnieli.
marcio
Cytat
PHP, to nie Java

Co przez to chcialbys powiedziec?Java wcale nie slynie z tego ze bajzlu nie ma wrecz przeciwnie
melkorm
Cytat
Ale dużo lepiej i łatwiej się dowiadywać, gdy wszystko nie jest tak porozbijane. PHP, to nie Java, a nieraz mam wrażenie, że projektanci ZF(1|2) chyba o tym zapomnieli.


Ogólnie, to mam inne podejście, bo lubię składać rzeczy z klocków, im drobniej tym lepiej bo łatwiej zidentyfikować potencjalne źródło problemu, a w dodatku łatwo zastąpić czymś innym - oczywiście bez popadania w jakieś skrajności smile.gif (dobrym przykładem tutaj jest nawet rozbijanie typów prostych na pewne obiekty spełniające jakąś funkcjonalność np. Cena produktu w sklepie itp), ale jak już mówię, tyle stylów ilu programistów, ktoś powie że tak ktoś powie że nie, ja zawsze preferuję gdy mogę bez większych problemów wstrzykiwać pewne funkcjonalności smile.gif

Co do architektury, akurat tutaj więcej zastrzeżeń miałem do 1'ki, szczególnie z PluginBroker itp~ w 2 zaczyna wyglądać to jakoś znośnie, w dodatku ViewModel który może dać spore możliwości smile.gif
erix
Cytat
Co przez to chcialbys powiedziec?

Że PHP jeszcze bardzo daleko do takiego uobiektowiania kodu, jaki ma Java. Ergo: podobnie wykorzystane wzorce obiektowe działają wolniej w PHP (nawet z akceleratorem) niż analogiczne w Javie (o zgrozo tongue.gif).
solificati
Cytat(erix @ 12.09.2012, 11:08:19 ) *
Że PHP jeszcze bardzo daleko do takiego uobiektowiania kodu, jaki ma Java. Ergo: podobnie wykorzystane wzorce obiektowe działają wolniej w PHP (nawet z akceleratorem) niż analogiczne w Javie (o zgrozo tongue.gif).

Zgodnie z cytatem: "W Javie wszystko jest obiektem, chyba, że nie jest".

No a prędkość działania to bardziej wynik dojrzałej platformy jaką jest jvm.
erix
Owszem, dlatego mam takie zdanie, a nie inne. tongue.gif

A PHP jeszcze byte-compiler ma naprawdę raczkujący, więc wciskanie wzorców na siłę, to IMO nie jest zbyt dobry pomysł.
marcio
Cytat
No a prędkość działania to bardziej wynik dojrzałej platformy jaką jest jvm.

Platforma jak platforma, ale java jako jezyk nie jest taka wspaniala wystarczy poczytac na forach/blogach jaka opinie o niej maja.
W javie zeby cos zrobic trzeba sie napisac wink.gif

Ja jvm istnieja szereg innych bardziej ciekawych jezykow typu scala,groovy,clojure nawet jython jest ciekawszy niz sama java poprostu kodzenie w niej wyglada na toporne(opinia koderow ktorych znam) lub czytalem wiele na ten temat.
solificati
Wszystko zależy w jakim kontekście porównujemy języki. Jython to po prostu okrojony Python, Groovy to bardziej zabawka a Clojure (mimo, że jestem ogromnym fanem) jeszcze nie udowodnił (chyba jak każdy LISP), że można w nim pisać duże aplikacje. Scala to na razie tylko Typesafe, ale już istnieje coś poważnego. Wszystko lata świetlne za Java.
herakles007a
Cytat(!*! @ 9.09.2012, 10:02:03 ) *
Dlatego punkt dla każdego kto opracuje sobie własny ;)


php.gif

red.orel
Cytat(ixox @ 10.09.2012, 08:11:41 ) *
?
Cały framework do tworzenia frameworku? Nie rozumiem.


  1. 'router' => array(
  2. 'routes' => array(
  3. 'album' => array(
  4. 'type' => 'segment',
  5. 'options' => array(
  6. 'route' => '/album[/:action][/:id]',
  7. 'constraints' => array(
  8. 'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
  9. 'id' => '[0-9]+',
  10. ),
  11. 'defaults' => array(
  12. 'controller' => 'Album\Controller\Album',
  13. 'action' => 'index',
  14. ),
  15. ),
  16. ),
  17. ),
  18. ),


  1. $id = (int) $this->params()->fromRoute('id', 0);


Wzorzec dla parametru id to [0-9]+, w jakim celu następnie rzutować wartość na int jeśli parametr musi być zgodny ze wzorcem?
d3ut3r
Dla wzorca :id poprawne jest 009 gdybyś później porównywał to w ten sposób:

  1.  
  2. $id='009';
  3.  
  4. if ($id===9){
  5. echo "id jest równe 9";
  6. }
  7.  


miałbyś pewnie problem, a tak nawet jak jest 009 to rzutowanie na (int) zwróci 9
red.orel
Kto i po co tworzy takie zapytania? Nadal nie widzę sensowności tej konstrukcji, 404 not found. Mój system może opierać się na kombinacji [0-9]{n}.
d3ut3r
Jak dla mnie to zupełnie poprawne, skoro spodziewam się wartości typu int to tak właśnie określam w kodzie , i jeszcze nigdy nie zwróciło się to przeciwko mnie.

Co jeżeli router okazałby się dziurawy ? (wiem że są to sporadyczne sytuację, ale gdyby jakimś cudem router przepuścił coś poza wzorcem miałbyś możliwą podatność). Prosta zasada nie ufać danym wysyłanym przez użyszkodnika smile.gif
red.orel
W takim razie mamy odmienne podejście do użytkowania frameworka. Ja stawiam na to że narzędzie którego używam funkcjonuje poprawnie, ewentualnie zmiany wprowadzane są na tyle szybko że prawdopodobieństwo wykorzystania ewentualnej luki jest mniejsze od chęci negowania DRY.
phpion
Cytat(red.orel @ 9.11.2012, 16:57:52 ) *
Wzorzec dla parametru id to [0-9]+, w jakim celu następnie rzutować wartość na int jeśli parametr musi być zgodny ze wzorcem?

Odpowiedź dał Ci d3ut3r, ale podam jeszcze jedną od siebie. Jeśli nie zrzutowałbyś tego na inta to miałbyś stringa - sprawa oczywista. Ja osobiście lubię operować na takich typach, jakich oczekuję. Jeśli na podstawie tego $id miałbym pobrać rekord z bazy to w tym miejscu używałbym inta, a nie stringa, bo ID w bazie jest liczbą całkowitą. Ot kwestia nawyku i stylu programowania.
d3ut3r
Nie widzę tutaj zaprzeczenia DRY jeżeli chcę mieć jawnie określony typ czego z $_GET nie wezmę to sobie rzutuję smile.gif ale fakt ilu programistów tyle spojrzeń. Co do ufania narzędziom osobiście nie zgodzę się, gdybyś miał popularną stronę opartą o framework x i pojawił by się jakiś 0-day to bardzo prawdopodobne, że miałbyś problem zanim wyjdzie łatka a programiści zaktualizują oprogramowanie.
sazian
Cytat(red.orel @ 9.11.2012, 17:37:20 ) *
Ja stawiam na to że narzędzie którego używam funkcjonuje poprawnie

a ja uważam że zasada ograniczonego zaufania obowiązuje nie tylko na drogach wink.gif
ano
Cytat(everth @ 8.09.2012, 14:55:51 ) *
A jak tam sprawa z wydajnością? Na blogach pisali że beta ZF2 potrafiła być dwa razy wolniejsza od jedynki. Jak się to ma teraz? Symfony2 w końcu jest jednak szybsze od poprzednika.


No właśnie, czekamy na jakieś testy wydajności!

Polecam http://framework.zend.com/wiki/display/ZFD...helearningcurve i fragment:

Cytat
Improve baseline performance of the framework

Baseline performance of Zend Framework applications has been getting worse with almost every release; even when gains are made, new processes added in new releases lead to degradation. While ZF started as a fairly nimble framework, it is now among the slower alternatives available, when using the supplied MVC stack.

The goal of ZF 2.0 is to identify causes of performance issues and implement code changes to mitigate them until ZF is competitive with any other PHP framework of similar capabilities.

Goals
MUST improve the baseline performance by 200-300% over the 1.x series, and competitive with the more agile full-stack frameworks currently available, including Solar and Symfony 2.
MUST provide deployment-time tools for optimizing performance in production
MUST provide documentation, tutorials, and examples to help developers follow best practices for performance.



Czy na prawdę formularze w ZF2 będzie się obsługiwało kodem w stylu:

  1. public function exchangeArray($data){
  2. $this->id = (isset($data['id'])) ? $data['id'] : null;
  3. $this->artist = (isset($data['artist'])) ? $data['artist'] : null;
  4. $this->title = (isset($data['title'])) ? $data['title'] : null;
  5. }


?! Nie ma bardziej inteligentnego, automatycznego bindowania?
Niby widzę wreszcie zastosowanie adnotacji w zendzie (http://blog.james-carr.org/2012/09/09/drying-up-your-zend-framework-2-models-with-annotations/) ale ten kodzik "exchangeArray" skutecznie psuje wrażenie 'fajności' ;P
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.