Celowo nie chciaÅ‚em tytuÅ‚ować wpisu Symfony vs Zend Framework bo wpisów o podobnej tematyce jest bardzo dużo. Jedne mniej, drugie bardziej konkretne i sensowne. Można siÄ™ spierać który z tych dwóch frameworków jest lepszy, jednak tak naprawdÄ™ pytanie brzmi, który jest dla nas bardziej odpowiedni, intuicyjny i z którym bÄ™dzie Nam siÄ™ lepiej pracowaÅ‚o. Ogólnie rzecz biorÄ…c bardzo drażniÄ…cÄ… sprawÄ… sÄ… wszelkie kłótnie: “który framework lepszy?”, “który wybrać”, “Zend Framework vs Symfony” - wszystko zależy od wymagaÅ„ projektu i programisty. Porównanie tym bardziej jest trudne, że Zf i Sf z zaÅ‚ożeÅ„ oferujÄ…c podobne możliwoÅ›ci, sÄ… zupeÅ‚nie różne. PostanowiÅ‚em wiÄ™c przedstawić moje skromne zdanie.
Z góry zaznaczam, że nie będę tutaj pisał nic o Cake PHP, CodeIgniter czy Kohanie. Nigdy nie miałem okazji pracować z żadnym z tych frameworków i w najbliższym czasie nie przewiduje, żeby coś w tym temacie się zmieniło.
Poniżej postaram się krótko i konkretnie przedstawić moje osobiste przemyślenia na ten temat, na podstawie własnych doświadczeń jakie mam w pracy z Sf i ZF. Wszelkie uwagi i opinie są bardzo mile widziane.
Do rzeczy. Jeśli chodzi o Zenda. Wielu programistów w ogóle nie uznaje go za framework, a raczej jako zbiór uporządkowanych klas. Przyjmijmy jednak, że jest to framework i to jeden z lepszych. Jest stosunkowo prosty, a jego nauka nie powinna przysporzyć większych problemów - przynajmniej podstawy. Stanowczo odradzam używania Zend_db_Table, które warto zamienić na rzecz np Doctrine (bardzo prosta integracja ), czy też Propela - tworzenie obiektów tabel nie jest dla mnie rozwiązaniem intuicyjnym.
Bardzo szybko i przyjemnie tworzy się w nim małe i średnie aplikacje. Dobrze sprawdza się również w przypadku bardziej rozbudowanych projektów, co udowodnili programiści Magento.
Interesujący system pluginów - zamykanie specyficznych części kodu/funkcjonalności w pluginach - możliwość wykorzystania jednego pluginu w kilku projektach (np: Plugin_Doctrine), bardziej przejrzysty i czytelny kod aplikacji.
Podstawą dla szybkiego i sprawnego tworzenia aplikacji na ZF jest utworzenie dobrego/własnego szkieletu - wybór odpowiedniej budowy/struktury katalogów, wymiana Zend_db_Table, dodanie kilku pluginów (dla zainteresowanych - Smarty).
Dlaczego warto zainteresować się Zendem:
- proste i dość przyjemne kodowanie - nawet nie znając Zenda bardzo szybko można rozpocząć z nim pracę;
- bardzo bogaty i rozbudownay zbiór klas - pisząc w Symfony często korzystam z Zend_Mail i Zend_Search_Lucene;
- duża elastyczność - prosta konfiguracja struktury katalogów, łatwość integracji np z Doctrine;
- pluginy, helpery - możlwiość dodawania/definowania własnych pluginów i helperów
Niestety nie używałem Zend_Form, ale jeśli podobny jest w założeniach do sfForm - dodatkowy plus.
Mimo, że użyłem ZF w kilku projektach - nie przekonał mnie. Zbyt duża dowolność, wiele rozwiązań jednego problemu mogą być uciążliwe.
Symfony to zupełnie inna bajka. Ilość usprawnień/ułatwień jakie udostępnia framework może przysporzyć o ból głowy. Jest framworkiem kompletnym, udostępnia pełny zestaw narzędzi wspomagających tworzenie aplikacji.
To co wg autorów ma ułatwiać i przyśpieszać prace programistów stanowi niekiedy barierę nie do pokonania dla początkujących developerów. W ZF prostą aplikację możemy stworzyć niemal natychmiast. W Sf najpierw musimy poznać podstawy - podstawy działania generatorów, tworzenia formularzy, działania routingu. Nic za darmo. Bo gdy tylko pokonamy pierwsze trudności dalsza praca to czysta przyjemność.
Elementy, które (moim zdaniem) sprawiają, że Sf jest wyjątkowy:
- genialny framework formularzy - świetnie pośredniczy między modelami a kontrolerami, przenosząc logikę działania formularzy - odciążamy kontrolery. Formularze stanowią dodatkową warstwę. Przepływ: kontroler <-> formularz <-> model.
- Å›wietnie rozwiÄ…zany system routingu - definiowanie bardzo rozbudowanych reguÅ‚, integracja z Propelem i Doctrine. Tworzenie “przyjaznych linków” bajecznie proste.
- do wyboru w pełni zintegrowane z frameworkiem Propel i Doctrine -
- zarządzanie sesją użytkownika - jedno z najlepszych rozwiązań z jakim jak dotąd się spotkałem
- generatory - potrafią naprawdę zaoszczędzić sporo czasu programistom, którzy wiedząjak z nich korzystać
- taski
To co odróżnia Sf od ZF to usprawnienia widoczne praktycznie na każdym poziomie. Prosty przykład: w ZF ręcznie ustawiamy strukturę, budujemy nasz front kontorler i sprawdzamy czy wszystko działa jak należy. W Sf:
symfony generate:project nowyProjekt symfony generate:app frontend //dla danej aplikacji symfony generate:module frontend nowyModul
- chociaż niektórzy tą automatyzację uznają za wadę.
Samo kodowanie jest bardzo intuicyjne i przyjemne. Dokumentacja mimo, że jest obszerna jeszcze w tym momencie nie jest kompletna - szczególnie jeśli chodzi o zaawansowane wykorzystanie formularzy. Warto bliżej przyjrzeć się tutorialom na stronie projektu Symfony - szczególnie Jobeet.
Bardzo ciekawe porównanie. (Nie)stety nie miałem jeszcze przyjemności korzystać z Zenda i nawet nie zamierzam, ale opis Symfony jest całkiem rzeczowy
A co z wydajnością? Czy da się Symfony przyspieszyć?
Myślałem że czytam posta sprzed 2 lat
ZF posiada już zalążek command line tool. W ZF ważne jest aby wypracowac swoją metodologię. ZF połączony z coraz lepszym CLI + wiedza z zakresu metodologii tworzenia oprogramowania + kilka innych narzędzi, które powinny byc w zasobniku każdego profesjonalisty jest potężnym narzędziem.
@Kowalikus - wszystko da się przyśpieszyc, tylko trzeba wiedziec jak
polecam poczytanie Performance Guide w manualu Zenda 
Gdyby nawet post byÅ‚ sprzed 2 lat - nadal byÅ‚by aktualny. Tak jak napisaÅ‚eÅ› ZF posiada zalążek CLI i nadal uważam, że jest to namiastka tego co oferuje Symfony. Ogólnie nie mam nic do Zenda - ale bardzo dużo rzeczy musimy napisać (”wypracować”) sobie sami. ZF traktuje raczej jako zbiór ciekawych komponentów, które z powodzeniem mogÄ™ wykorzystać w projektach SF. Nie lubiÄ™ tematów typu “SF vs ZF” bo każdy z tych frameworków ma swoje plusy i minusy, a wybór w bardzo dużej mierze zależy od typu projektu i naszych wÅ‚asnych upodobaÅ„.