Dziś jest czwartek, 17 maja 2012 roku (z kalendarza...)

Symfony 1.4 okiem Zyxa

Icon

28.02.2011, 18:09

PHP

Komentarze (14)

Powrót

W przeciągu ostatnich dwóch tygodni musiałem w przyspieszonym tempie opanować framework Symfony do poziomu nadludzkiego, aby dokończyć pewien projekt. Mniejsza o szczegóły - dość, że niekompetencja i zupełny brak odpowiedzialności niektórych ludzi twierdzących, że są programistami, mogą być naprawdę porażające. Dotychczas, jeśli już, pracowałem z Zend Frameworkiem, Kohaną oraz Yii, zaś Symfony znałem bardziej z pobieżnego przeglądu. Jako że zbliża się premiera wersji drugiej tego frameworka, postanowiłem spojrzeć krytycznym okiem na to, co żegnamy.

Symfony Framework

Framework Symfony został stworzony przez znanego pewnie wielu programistom Fabiena Potenciera. Jest on jednym z popularniejszych frameworków w naszym kraju, ale na świecie jednak nie zdołał zdobyć sobie takiego uznania, plasując się daleko w tyle za ZF-em, CakePHP oraz... CodeIgniterem, czego chyba nigdy nie zrozumiem. Reakcje, z jakimi do tej pory się na jego temat spotykałem, są różne. Część programistów chwali go za dużą liczbę generatorów, inni zaś wyklinają wydajność, a właściwie jej brak.

W przeszłości miałem już jedno podejście do Symfony, ale odrzuciła mnie od tego frameworka rzecz prozaiczna, mianowicie szablony PHP. Teraz od tego czy go opanuję, zależały losy świata, więc trzeba było zakasać rękawy, wziąć się w garść i zacząć pisać. Co z tego wynikło?

W dalszej części tekstu zamiast słowa framework będę używać słowa platforma. Takie tłumaczenie odkryłem w najnowszym polskim wydaniu książki Gangu Czworga i muszę przyznać, że jest warte uwagi.

Poziom trudności

Dla kogoś, kto pracował już z kilkoma platformami, nauczenie się kolejnej nie stanowi specjalnej trudności. Wszędzie mamy praktycznie te same elementy, wszędzie mamy niemal identyczną architekturę MVP+pasywny widok z tylko drobnymi różnicami, zatem jedyne, co nam potrzeba, to nauczenie się nowych konwencji oraz API. Dla osoby z doświadczeniem opanowanie Symfony na satysfakcjonującym poziomie to kwestia góra kilku dni aktywniejszej pracy z kodem. Jeśli nie znasz Doctrine, musisz też wziąć poprawkę na naukę korzystania z tego ORM-a oraz nauczenie się DQL-a.

Architektura

Symfony to niemal klasyczna implementacja wzorca MVP z pasywnym widokiem, czyli tego samego, który spotykamy w 95% platform dla aplikacji internetowych, jakie powstają. Mamy sobie warstwę prezentera dzielącą się na moduły i akcje, która zajmuje się większością rzeczy, mamy szablony pełniące rolę widoku, do którego pchamy dane, zaś za warstwę modelu robi kod biblioteki Doctrine. Dodatkowo istnieje mechanizm komponentów, czyli trójek akcja+szablon+model, które możemy kaskadowo wywoływać np. z poziomu szablonu. Pozwala to na wydzielenie pewnych wspólnych fragmentów aplikacji i ich opakowanie w celu wygodniejszego użycia w innych miejscach.

Stosunkowo ciekawą rzeczą jest sposób opakowania tego wszystkiego. Kod akcji, szablony oraz konfiguracja jest zapakowany w pojedynczym bycie zwanym modułem. Rozwiązanie to ma swoje plusy i minusy. Do niewątpliwych plusów należy fakt, że dany kod nie jest rozrzucony po całym projekcie. Jeśli piszemy obsługę profilu użytkownika, wszystko mamy w jednym miejscu. Niestety, w module nie są przechowywane pliki modelu oraz formularze, których szkielety są generowane domyślnie. W większych projektach oznacza to dla nas dalej dużo skakania po drzewie katalogowym.

Sam projekt możemy podzielić sobie na aplikacje, które współdzielą ten sam model oraz mają wspólną konfigurację bazową. Najczęściej wykorzystuje się to do podzielenia systemu na część publiczną oraz panel administracyjny. Dodatkowo, w projekcie możemy korzystać z różnych wtyczek. Zasadniczo nie ma specjalnych ograniczeń na to, co one dostarczają. Jedne wtyczki mogą dodawać np. dodatkowe kontrolki formularzy, inne całe moduły i akcje realizujące pewną całość. Tutaj dla twórców należy się duży plus, bowiem bardzo ułatwia to rozbudowę aplikacji. Osobnym tematem jest jakość części dostępnych w sieci wtyczek, ale tu ciężko za to winić twórców platformy.

Z wtyczkami nieodłącznie wiąże się temat konfiguracji. W Symfony postawiono na kaskadowość. Mamy globalną konfigurację, mamy konfigurację aplikacji, mamy konfigurację modułu, mamy konfigurację konkretnej wtyczki. Wszystko to jest miksowane razem i łączone w jedną całość i również ma to zarówno wady, jak i zalety. Do zalet na pewno warto zaliczyć możliwość przykrywania globalnych opcji lokalnymi ustawieniami. Jeśli w jakimś module potrzebujemy specyficznych ustawień, po prostu tworzymy odpowiedni plik konfiguracyjny w jego katalogu i po sprawie. W dużych projektach prowadzi to jednak do efektu zwanego konfiguracyjnym piekłem, gdzie mamy w ekstremalnych przypadkach kilkaset ustawień porozrzucanych po kilkuset miejscach tak, że ciężko jest nad tym zapanować. Ja osobiście preferuję sytuacje, gdy cała konfiguracja siedzi sobie w jednym miejscu. Kaskadowości to nie wyklucza, a bardzo ułatwia życie.

ORM zwany modelem

Symfony stoi ORM-ami. W początkowej fazie rozwoju główną biblioteką mapowania obiektowego podszywającą się pod model był Propel, który później musiał ustąpić miejsca Doctrine 1.x. Twórcy frameworka zrobili niewątpliwie dobry użytek z reprezentowania tabel bazodanowych jako obiektów. Wykonywanie typowych operacji jest bardzo proste, a także bardzo ułatwia integrację wielu mniejszych komponentów. W projekcie stworzyliśmy różne komponenty np. do komentowania czy oceniania różnych rzeczy. Wystarczyło dopisać sobie ich obecność do schematu, a następnie przekazać ich obiekt do magicznego pudełeczka, które zajmowało się już resztą. Taka architektura dobrze się też sprawdzała przy prostych formularzach oraz typowych CRUD-ach.

Problemy niestety zaczynały się przy próbie wejścia na wyższy poziom abstrakcji. Realizowany projekt jest dla mnie kolejnym dowodem, że w złożonych aplikacjach automatyczne ORM-y tak naprawdę mogą wyrządzić więcej szkody niż pożytku z powodu zbyt dużego rozczłonkowania poszczególnych obiektów. Spójrzmy sobie na ten blog. Logika jego bazy danych jest prosta, jak budowa cepa, podobnie jak hipotetyczny model obiektowy. Jednak co w sytuacji, gdy pojedynczy byt rzeczywisty jest opisywany przez np. 30 tabel? I nie mówimy tu o zwykłych informacyjnych tabelach, ale rozbiciu informacji, która pod wszystkimi względami jest częścią jednego i tego samego, na kilka tabel. Aż się prosi, by mieć do tego jeden obiekt. ORM tymczasem da nam tyle obiektów, ile tabel i musimy się z tym zwyczajnie pogodzić. Wewnętrznej budowy nie jesteśmy w stanie za bardzo ukryć, co w przyszłości może stwarzać trochę trudności przy rozbudowie.

Taki tryb pracy nie pozostaje też bez wpływu na wydajność. Symfony generalnie wymaga, aby większość rzeczy była rzutowana właśnie na obiekty nawet, jeśli specjalnie nie będziemy wykorzystywać faktu ich obiektowości. Tymczasem w dokumentacji Doctrine czytamy, że rzutowanie obiektowe nie powinno być nadużywane ze względu na duży narzut wydajnościowy. Tam, gdzie to możliwe, powinniśmy korzystać ze zwykłych tablic. W przypadku Symfony próba zastosowania się do tej rady napotyka wiele trudności, jako że nagle zostajemy bez 80-90% narzędzi, jakie platforma nam oferowała.

Bliskie przywiązanie do Doctrine ma też jedną, poważną wadę. Wystarczy spróbować oprzeć swój projekt na bazie innej, niż MySQL, by się o tym przekonać. Niestety w ostatnich miesiącach przekonałem się boleśnie, że twórcy tej biblioteki poza MySQL-em za bardzo świata nie widzą i silniki dla innych systemów bazodanowych są strasznie niedopracowane. Jeśli nie korzystamy z jakichś bardziej zaawansowanych funkcji, od biedy będzie to działać, tylko co z tego, kiedy nawet sobie indeksów porządnie nie możemy zdefiniować, bo w dokumentacji "zapomniano" wspomnieć, że pełne wsparcie dla konfigurowania porządku, długości itd. ma tylko MySQL? Skoro już korzystamy z takiego PostgreSQL-a, to najczęściej po to, by wykorzystać jego możliwości. Aby to zrobić, musimy przeprosić się z językiem SQL i PDO i klepać zapytania ręcznie. I tu zaczynają się największe jaja, jeśli chodzi o Symfony, bowiem nagle okazuje się, że w tej platformie poza Doctrinem/Propelem najzwyczajniej w świecie nic nie ma! Aby było śmieszniej, nawet ciężko jest sprawić, by coś było. Głupie stronicowanie trzeba klepać od zera, bowiem klasa sfPager jest... klasą abstrakcyjną dla stronicowania opartego o Propel/Doctrine i o wykorzystaniu jej do innych celów możemy spokojnie zapomnieć.

Podsumowując: albo używasz Doctrine, które w bardziej złożonych projektach potrafi narobić więcej problemów niż pożytku i które słabo radzi sobie z bazamy innymi niż MySQL, albo nie masz nic. Jeśli Symfony 2 będzie tak silnie oparte na Doctrine 2, to już z góry współczuję programistom, bowiem tam ograniczeń możliwości baz danych jest jeszcze więcej.

Szablony zwane widokiem

Co tu dużo mówić. Symfony to kolejna platforma, która potwierdziła, że używanie PHP do klepania szablonów to najbardziej idiotyczny pomysł na świecie i masochizm. Inne języki szablonów są skomplikowane i ograniczają? Hipokryzja, zważywszy co trzeba zrobić w przypadku PHP:

  • Gołe PHP nie nadaje się do niczego, bowiem nic w nim nie ma.
  • Zatem trzeba napisać mnóstwo funkcji wspomagających, helperów itd.
  • Aby wiedzieć, jak z tych funkcji korzystać, trzeba się ich też nauczyć, udokumentować je itd.
  • Co więcej, aby się biedni programiści nie zmęczyli i nie powiedzieli, że dana platforma jest głupia, trzeba napakować tam tyle magii, ile wlezie, żeby stworzyć u nich iluzję, że szablony PHP są proste.
  • Magia sprawia, że nic nie jest tym, na co wygląda, a efekt jest taki, że połowa struktur kontrolnych PHP wariuje przy próbie zrobienia czegoś, co domyślnie powinno działać bez zająknięcia.
  • Ergo, musimy się od nowa nauczyć, jak działają zmienne, pętle, na co uważać, czego nie robić, co nie zadziała, gdzie kryją się kruczki...
  • I dowiadujemy się o tym najczęściej w praniu, bo twórcom Symfony niespecjalnie chciało się udokumentować dobre 3/4 rzeczy związanych z szablonami.

I wy ludzie śmiecie twierdzić, że szablony PHP są proste i czytelne w użyciu?! Buahahahahahahahahahahahahaha!!!!! Wybaczcie, ale musiałem :). Nie znam innej reakcji na fakt, ile czasu zmarnowałem, próbując obchodzić idiotyzmy helperów, magicznego escape'owania kodu HTML w zmiennych, a zwłaszcza obsługi formularzy, gdzie po prostu dzieją się cuda. Kod HTML do połowy widgetów jest zakodowany na sztywno, w ogóle nie współgra z tym, co robią graficy i praktycznie nie ma możliwości jego modyfikacji. Dlaczego? Bowiem aby to zrobić, potrzebna jest obiektówka, a dokumentacja do tego, jak pisać tzw. formattery zwyczajnie nie istnieje. Tę wiedzę tajemną posiadają tylko twórcy i wybrane grono osób, które przekazuje ją sobie z pokolenia na pokolenie. Dołączyć do niego można tylko trafiając przez przypadek na jakiś blog, gdzie któryś z wtajemniczonych nieopatrznie jakiś fragment takiego formattera opublikował.

Margia... arghhh...

Symfony 1.x to platforma starej daty i magia jest tu wszechobecna. Mamy ją w Doctrine, mamy ją w szablonach, mamy w normalnym kodzie. I mamy problem, bo to wszystko jest fajne, dopóki działa. Gdy nie działa, nagle okazuje się, że nie bardzo wiemy, gdzie zacząć szukać przyczyny. Zresztą, o negatywnych aspektach magii wypowiadałem się już szerzej w innym wpisie. Tutaj ograniczę się jedynie do adnotacji, że na obchodzenie tych różnych magicznych duperszmitów straciłem naprawdę mnóstwo czasu tylko przez to, że komuś zamiast get() zachciało się napisać __get().

Dokumentacja, wsparcie itd.

Jakość dokumentacji to jedna ze słabszych rzeczy tej platformy. Cała wiedza jest porozrzucana po kilku niezależnych od siebie podręcznikach tak, że do końca nawet nie wiadomo, czego gdzie szukać, a nawet i wtedy dany rozdział nie omawia wszystkiego, koncentrując się bardziej na skończeniu Jobeet. Fajnie się to może i czyta do poduszki, tylko co z tego, kiedy poszukujemy konkretnej informacji o tym, jak używać konkretnego elementu i dosłownie cholera człowieka trafia. Dramatyzm podnosi dodatkowo fakt, że na stronie internetowej mamy dokumentacje do wszystkich pięciu głównych wydań Symfony oraz że pomiędzy wydaniami 1.2 i 1.3 zmieniły się nazwy części podręczników. Wyszukiwarka oczywiście zaindeksowała każdą z nich, dzięki czemu po wpisaniu danej frazy w Google najczęściej wyskoczy Ci wszystko, tylko nie Twoja wersja platformy.

Równie tragicznie prezentuje się dokumentacja API. Jest to klasyczny przykład tego, jak nie powinno się dokumentować kodu. Większość opisów to zwykłe masło maślane: setUpSomething() - sets up something. A jakieś szczegóły? Gdzie to jest wykorzystywane? Czy tego potrzebuję? Jeśli tak, to w jaki sposób? Ponadto jeszcze pół biedy, jak jest jakiś opis, bowiem niespecjalnie zadano sobie trud, aby ten opis w niektórych przypadkach w ogóle był. Taka kuriozalna sytuacja występuje m.in. ze wspomnianymi już formatterami. W podręczniku czytamy, że aby dowiedzieć się, jak zrobić własny formatter, musimy zajrzeć do API. Zaglądamy do API, a tam nie ma nic o formatterach. Formaty daty do helperów? Trzeba poszukać po blogach, albo w kodzie źródłowym. Czym się różni configure() od setup() w sfForm i dlaczego część kodu wykorzystuje jedno, a inna drugie? Zostaje tylko analiza kodu źródłowego.

Wydajność

Niestety, Symfony do demonów szybkości nie należy. W trybie debug praca z tą platformą przy większym projekcie to koszmar, a pojedyncze żądanie może wykonywać się nawet 10 sekund. Nie muszę dodawać, że czekanie, aż biedny PHP policzy wszystko strasznie spowalnia prace. W trybie produkcyjnym Symfony ratuje ekstremalny cache, ale wtedy pojawiają się problemy z jego aktualizacją. Swoje pięć groszy dokłada Doctrine, gdzie najczęściej musimy korzystać z powolnego rzutowania do obiektów. Może jedynie cieszyć, że wreszcie twórcy połapali się, że to jednak jest nienajlepsza droga rozwoju i zaczęli dbać o to, by robić rzeczy szybciej.

Podsumowanie

Symfony mnie nie zachwycił. Platforma ta powinna raczej nazywać się Magic albo Hogwart, bo symfonie charakteryzują się raczej elegancją i wewnętrzną spójnością, a tego o Symfony powiedzieć nie mogę. Mnóstwo magii, niespójności i braków, zwłaszcza jeśli chcemy wyjść poza jakieś podstawowe ramy. Nie ma się co czarować, przy większych projektach na pewno będziemy musieli z konieczności wyjść poza nie, a tu jest z tym poważny problem. Swoje pięć groszy dokłada też kiepska dokumentacja.

Oczywiście nauka Symfony 1.x i próba wiązania z nim przyszłości to teraz średni pomysł z racji zbliżającego się końca prac nad dwójką. Poprawiono tam przynajmniej część z moich uwag - wszystko wskazuje na to, że sami twórcy doszli do podobnych wniosków, co ja i postanowili na bazie tego stworzyć coś lepszego. Wersja 1.x dobrze nadaje się do stworzenia zaplecza dla typowych stron internetowych; jakiś nieduży CMS, może blog, strona domowa czy galeria internetowa. Ja realizowałem większy projekt, doskonale pamiętam wszystkie problemy, jakie napotkałem przy próbie zgrania tego wszystkiego do kupy i widzę potencjalne problemy wydajnościowe oraz związane ze skalowalnością, jakie mogą pojawić się w przyszłości. Jak ktoś się uprze, to napisze wszystko, co chce, ale jeśli można to zrobić łatwiej i szybciej?

Naturalnie nie wszystko w Symfony jest złe - wspominam o tym, by ktoś nie wyciągnął pochopnych wniosków. Po prostu trzeba mieć na uwadze to, że platforma ta jest ukierunkowana na specyficzne potrzeby. Jeśli się w nie wstrzelimy, dzięki choćby admin generatorowi praca idzie dużo szybciej. Znalazłem w niej kilka ciekawych koncepcji, które z pewnością przydadzą się w dalszych pracach nad Trinity...

Powrót

Komentarze

avatar

Napisał destroyer w poniedziałek, 28 lutego 2011 o 19:54

Nie dowierzam, że postanowiłeś napisać na koniec coś pozytywnego o symfony. Wpis zacząłeś od wpadki na temat widoków, ponieważ symfony je posiada.
Jest frameworkiem z architekturą MVC, to że korzystałeś z niego jak z MVP, to już co innego. Model w postaci ORM oczywiście sprawdza się w CRUD, dla bardziej skomplikowanych rzeczy tworzysz własny model np. w DDD.
Spora część to subiektywne odczucia i do nich nie ma sensu się odnosić.

avatar

Napisał pfugiel w poniedziałek, 28 lutego 2011 o 20:16

Jako fan Symfony chciałbym tylko powiedzieć że framework zaczął dużo tracić odkąd z Sensio Labs odszedł François Zaninotto (obecnie rozwija ORM Propel). Jest twórcą wielu świetnych pluginów do Symfony autorem dokumentacji (kiedyś dokumentacja była
jedną z mocniejszych stron tego frameworka).

Śmiem twierdzić że gdyby François nie odszedł, Symfony wyglądałby dziś o wiele lepiej, a już napewno nie byłoby problemu z dokumentacją.

Jeszcze odnośnie propela: zastanawiasz się "co w sytuacji, gdy pojedynczy byt rzeczywisty jest opisywany przez np. 30 tabel? (...)" - no cóż,
nie radziłbym robić takiego projektu w PHP :P

Być może w projektach w których wykorzystywałem propela nie miałem 30 powiązanych ze soba tabel (moze max 20) ale wg. mnie relacje
sa zrobione świetnie i wygenerowane obiekty pomagają nad tym wszystkim zapanować.

Jeśli chodzi o Doctrine to wystarczająco dużo nasłuchałem się od znajomych i nie mam zamiaru tracić czasu nawet na testowanie ;)

avatar

Napisał Tomasz w poniedziałek, 28 lutego 2011 o 21:51

Zyx, jesteś wielki! To pierwszy, tak kompleksowy opis frameworka jaki widziałem w polskim internecie. Dla osoby, która rozważa wybór Symfony jest to na pewno nieoceniona pomoc. Z wielką chęcią przeczytał bym równie dokładne analizy pozostałych platform na których pracowałeś :).

avatar

Napisał SongoQ w poniedziałek, 28 lutego 2011 o 22:58

Przez 2 tygodnie nie jesteś w stanie manual przeczytać a co dopiero nauczyć się używać symfony.

Symfony ma swoje wady i zalety. Dla mnie i projektów, w których biorę udział pasuje idealnie. A jeśli chodzi o wydajność, jeśli myślisz od początku i wiesz gdzie mogą wystąpić problemy to od zwracasz na takie rzeczy uwagę, np. Doctrine.

avatar

Napisał Zyx w poniedziałek, 28 lutego 2011 o 23:20

SongoQ -> tja... no cóż, jak ktoś ma problemy z płynnym czytaniem, to faktycznie 2 tygodnie mogą mu nie wystarczyć :). Jak ktoś nigdy nie pracował z innymi frameworkami, albo przy przejściu do nowego czyści całkowicie swoją pamięć, to też. Wiadomo, że naprawdę optymalną wydajność kodowania osiąga się znacznie dłużej, ale wynika to z oczywistego (przynajmniej dla mnie) faktu, że API i różne magiczne kruczki nie nauczą się same za nas, a nie dlatego, że platforma jest jakoś wybitnie różna od konkurencji. Z językami programowania jest podobnie - dopóki obracasz się w jednym paradygmacie, opanowywanie nowego języka do niezłego poziomu to formalność. Dopiero gdy skaczemy np. z programowania imperatywnego do funkcyjnego, musimy zaczynać naprawdę od zera.

destroyer -> model w postaci dowolnej można stworzyć zawsze i wszędzie. Problem polega na tym, że jeśli w Symfony chcesz używać czegoś innego, niż Doctrine, nagle zostajesz z pustymi rękami i musisz reimplementować najbardziej podstawowe rzeczy. Dziwne, że jakoś w innych platformach nie ma problemu np. z udostępnieniem systemu stronicowania ogólnego przeznaczenia. A pochwaliłem Symfony, bo było za co. Sekcja "Architektura" też utrzymana jest w raczej pozytywnym tonie. Jak sam chcę robić dobre oprogramowanie, trzeba zwracać uwagę na to, co dobre. W tekście zawsze negatywy wychodzą dłużej, ponieważ się je dokładnie opisuje. A pozytywy, to co: najczęściej napiszesz, że wygodnie się pracowało i każde dodatkowe słowo to zbędne lanie wody :). Taki Admin Generator dla porządnego programisty to niezwykłe ułatwienie i nie mam zamiaru tego przecież negować :). Większość uwag krytycznych dotyczy sposobu wykorzystania PHP (magia) oraz założenia, że jak robię rzecz XXX, to zawsze mam ją robić w ten jedyny sposób, który autorzy sobie wymyślili. To są błędy bardziej obiektywne i krytykuję je nawet w swoich własnych projektach.

pfugiel -> PHP nie ma tu nic do rzeczy. Takie samo rozdrobnienie miałbyś, jakbyś użył ORM-a w dowolnym innym języku, a tak te tabele istnieją głównie na poziomie bazy danych :). Ja osobiście stronię od prostych projektów, głównie dlatego że śmiertelnie mnie nudzą. W końcu ile razy można klepać w kółko to samo?

Tomasz -> jakiś rok temu pisałem już o Yii Framework.

avatar

Napisał Mr. Obvious w wtorek, 1 marca 2011 o 08:51

Spokojnie, przecież dla Zyxa tylko jego "platformy" są super, a reszta to syf ;) Przesiadłby się kolega wreszcie na jakąś Javę czy .NET, a nie kopiesz leżącego. Klepiesz coś o wydajności w języku skryptowym, że bez cache jest lipa? No kuźwa, a co ma być. Po to się tego używa, żeby było wygodnie, a szybko to ma powstać aplikacja. Używam symfony już 3 lata i nigdy by mi nie przyszło do głowy, żeby robić w tym "obiekty na 30 tabel". Jak już mam skomplikowany model to robie go w Javie gdzie mam normlany IoC, pierdylion innych bibliotek i cały ten SOLID przychodzi z łatwością. Wtedy symfony może pełnić co najwyżej rolę frontendu do webserwisów. To jest wydajne i skalowalne. Po co brnąć w ten język jak zależy ci na jakości kodu? Wyznajesz zasadę, że lepiej być mistrzem w polskiej lidze niż przeciętniakiem w NBA?

Co do symfony. Jasne, że magia to syf, że dokumentacja jest porozwalana na 5 książek, ale jak już się je przeczyta i do magii przyzwyczai to tragedii nie ma. Patrzę na moją "implementację od zera" sfPagera dla tablicy i to są dosłownie jednolinijkowe metody. Tajemna wiedza o formatterach http://www.symfony-project.org/more-with-symfony/1_4/en/06-Advanced-Forms#chapter_06_custom_styling_when_a_form_element_has_an_error Trzeba pamiętać, że symfony ma swój target. Jest nastawione bardziej na agencje reklamowe, gdzie nie zawsze znajdziemy programistów najwyższych lotów, a nie architektów skomplikowanych systemów. I do takiej pracy jest to lepsze niż Zend.

Btw. chętnie się dowiem co teraz jest trendy w PHP? Własna platforma na PHP5.3? Na to niestety czasu nie mam. Pewnie się przesiąde na Symfony2.

avatar

Napisał Paweł `hwao` Hal w wtorek, 1 marca 2011 o 09:06

"Teraz od tego czy go opanuję, zależały losy świata, więc trzeba było zakasać rękawy"

Zyx czyżbyś pisał rozkład PKP na Symfony 1.4 ?

avatar

Napisał thejw23 w wtorek, 1 marca 2011 o 09:09

ciekawostka, schemat Symfony 2.0 PR6 Sandbox wygenerowany przez inclued: Symfony 2.0 PR6

dla porownania: KohanaPHP 3.0.9

oba schematy wygenerowane na czystych instalacjach, standardowe hello world dolaczone do kazdej z platform.

avatar

Napisał thejw23 w wtorek, 1 marca 2011 o 09:19

zapomnialem o 1.4 - Symfony 1.4 Sandbox

avatar

Napisał majne w wtorek, 1 marca 2011 o 09:45

Zgadzam się z autorem. Dokumentacja jest na pierwszy rzut oka duża i wyczerpująca, ale jak chce się coś w niej znaleźć konkretnego (wykraczającego poza proste stworzenie akcji itp.) to graniczy wręcz z cudem.

Obsługa formularzy brrrrryyyy. Formy w ZF są przy formach w Symfony napisane prosto i zrozumiale :P (mimo iż w rzeczywistości tak do końca nie jest)

avatar

Napisał murwazy w wtorek, 1 marca 2011 o 10:37

pfugiel - nie krytykuj tak jesli nie miales do czynienia bo nie brzmisz wiarygodnie.

avatar

Napisał Zyx w wtorek, 1 marca 2011 o 17:12

Mr. Obvious -> jak mogę mówić, że jakaś moja platforma jest super, kiedy jeszcze żadnej nie napisałem? Trinity to zwyczajny eksperyment i wręcz odradzam innym jego używanie w normalnej produkcji, a nie polecam. Javę również znam i programuję w niej, ale co mi z tego, kiedy 90% klientów marzących o własnym biznesie internetowym zwyczajnie nie ma kasy zarówno by coś takiego kupić, jak i by coś takiego utrzymać? A plany przesiadki z PHP na coś innego też mam, już ty się o moją przyszłość nie bój.

avatar

Napisał Artur Świerc w wtorek, 1 marca 2011 o 22:07

Co do modelu: Wydaje mi się, że spadek wydajności kodu w obecnych czasach, podczas mapowania/rzutowania nie powinien być zbyt drastyczny? Zwykle najwięcej czasu tracimy na operacjach na bazie.

Ciekawi mnie to, ponieważ od pewnego czasu jestem wręcz zauroczony DDD. Tam praktycznie wszystko jest obiektem, samo wykorzystywanie kodu to bajka dla programisty - brak niejednoznaczności.

Ile to razy spotkałem się z implementacją, w której to takie same metody (tylko z nazwy) różnych klas modelu - jedna zwracała listę/arraya druga zaś kolekcję obiektów.

Swój nowy projekt także chciałem oprzeć na mapowaniu z podziałem na encje etc- tj w JPA, jednakże, jeśli to ma mulić niemiłosiernie to warto się zastanowić.

Propozycja na nowy wpis - napisz coś o architekturze swojego modelu ;)

avatar

Napisał rasgan w poniedziałek, 7 marca 2011 o 16:44

I ja bym chętnie poczytał takie posty o innych FW. Najlepiej o Zend i Kohana - bo te dwa chciałbym opanować.

Pamiętaj, dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Skomentuj

NickInformacja
E-mailNa wypadek potrzeby kontaktu z autorem (niepublikowany)
BlogNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wikiKomentarze są moderowane - przeczytaj zasady!

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2012 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia