Zend Framework 2 vs Symfony 2
Zelf ben ik een fan van ZF, maar ben benieuwd naar jullie meningen, en wat jullie aantrekt in 1 van de 2 frameworks, en wat niet.
Ik zou gaan voor Symfony2, voor 90%. Het mooie aan Symfony2 vind ik de stijl van programmeren, de enorme flexibiliteit en de community.
stijl van programmeren - Allereerst natuurlijk het feit dat het een HTTP framework is en geen MVC. Daarnaast vind ik sommige benamingen gewoon mooier en vind ik de broncode veel makkelijker en leuker om te lezen.
Maar ook het feit dat ze sommige dingen niet weer opnieuw gaan uitvinden. Er bestaat al een mooie templating engine, Twig, dus waarom die niet gebruiken? Er bestaan al hele mooie ORMs (doctrine2 en propel) en er bestaat al een mooie logging class (monolog) en voor het handelen van assets hebben we al een mooie library genaamd Assetic.
de enorme flexibiliteit - Het framework is maar een klein beetje van Symfony2. Het grootste deel bestaat uit losse componenten die je geweldig in al je projecten kunt gebruiken. Er is bijna geen 1 PHP project waar ik tegenwoordig geen Symfony2 componenten voor gebruik. En ik merk ook dat ik niet de enige ben, een opkomend framework als Laravel gebruikt Sf2 componenten, hetzelfde geldt voor Behat, Composer, ect.
En een goed punt waar je deze flexibiliteit ziet is in welke grote applicaties ze gebruiken: De HttpKernel, de kern van het framework, is zo flexibel dat het gebruikt wordt in een full-stack framework (sf2), een micro-framework (silex), de markleidende CMS (drupal8) en een CMS framework (symfony cmf).
de community - Symfony2 heeft de grootste community van alle PHP projecten en dat merk je. Het hele project is ingesteld op opensource en je vraagt voor iets of je plaatst een bug fix/feature request en binnen een dag is je PR volledig gereviewed ect. De Symfony2 community leeft echt!
Ik heb een tijdje geleden gewerkt met Zend Framework 2 en dat was voor het grootste deel een afknapper. Allereerst was daar de documentatie die bar en echt bar slecht is. Ik heb die maar weg geschoven en ben maar begonnen met het bekijken van de source-code, want dat ging stukken beter.
Wat ik ook een afknapper vond was het feit dat het lijkt alsof ZF2 nog niet stable was toe ie uitkwam. Sommige dingen werkte niet eens of heel slecht en dingen waren zo veranderd dat je nergens meer up to date informatie kon vinden. Merk op dat ZF2.1 op dit gebied misschien wel sterk kan veranderen, die heb ik nog niet getest.
Als laatste was het de ZendSkeletonApplication. Wat een beroerd stukje code was dat! Toen ik begon dit aan te passen was ik een week bezig en heb toen maar mijn project gestaakt, om het later (als er wel docs zijn) weer eens op te pakken.
En dan, om het klagen af te leren, die configuratie. Eindeloze in elkaar hakende PHP arrays, wat verschrikkelijk! En dat terwijl je een config component inlaad die readers heeft voor xml, yaml, ini en json.
Merk wel op dat er 1 component is van ZF2 die ik tegenwoordig gebruik in mijn projecten en dat is de EventManager. Die is gewoon stukken beter dan die van SF2. En ook de ServiceManager vind ik wel nice, die heb ik dan ook als basis genomen voor mijn container. Maar het jammere daaraan is dan weer dat er in het framework voornamelijk gebruik gemaakt wordt van het mindere Di component (waarbij ik dan weer voorkeur heb voor symfony's DependencyInjection component).
Maar ook bij het gebruik van deze component in je PHP projecten stuit je weer op problemen. Waarom maakt Zend wel overal composer packages van, maar zetten ze die op een eigen server en niet op packagist? Dat zorgt voor enorm veel nutteloze problemen, met bijv. Travis of een verkeerd geconfigureerde PHP.ini.
Wat ik vooral grappig vond in de handleiding van ZF2 dat ze na een kleine introductie direct beginnen met unit tests :P
niet positief op gereageerd:
Het lijkt erop dat ze bij Zend nog niet echt goed zijn in documentatie. Voorstellen om unit tests compleet uit de quick start te halen, want quick start hoort alleen te gaan om de echte basics, en om die in een ´advanced tutorials´ sectie te plaatsen zijn ook verworpen.
In feite is alle documentatie van ZF2 gewoon een kopie van de ZF2 tutorial van Matthew Weier O'Phinney (maker van ZF)...
Raoul, ja dat vond ik ook leuk. Heb ook gevraagd of het niet logischer is om eerst uit te leggen wat al die dingen voorstellen ipv onbekende begrippen (zoals modules, controller en models) te testen. Maar daar werd Quote:
Well the first step about the unit testing is handled on the Application module. Not sure if the order should be changed here as The flow is just to install the skeleton then create the tests for application and then continue working on your module or working on the Application module itself.
Het lijkt erop dat ze bij Zend nog niet echt goed zijn in documentatie. Voorstellen om unit tests compleet uit de quick start te halen, want quick start hoort alleen te gaan om de echte basics, en om die in een ´advanced tutorials´ sectie te plaatsen zijn ook verworpen.
In feite is alle documentatie van ZF2 gewoon een kopie van de ZF2 tutorial van Matthew Weier O'Phinney (maker van ZF)...
Ik denk dat beginners in ZF2 vooral direct aan de slag willen gaan met behulp van de handleiding in plaats van unit tests schrijven.....
Betreft de unit tests in de tutorial, vind ik dit persoonlijk juist op de goede plaats staan.
Dit aangezien het mij verstandig lijkt om voor ieder nieuw onderdeel ook gelijk een unit test te maken, en dit niet achteraf te doen.
Maar om in een quick tour als 2e hoofdstuk, dus direct na de installatie nou over unit tests te beginnen. Stel ik was nieuw met frameworks, dan zou ik direct met zend stoppen: 'Your first Controller test' wacht even, ik heb net 400 regels code gekopieerd, weet totaal niet wat ik aan het doen ben, unit testing is al helemaal een vreemd begrip en dan ga je het hebben over controllers? Wat is dat nou weer?
:), ja .. in de documentatie wordt er van uitgegaan dat diegene al reeds bekent is met zf
... maar velen zijn niet bekend met ZF, en dan moet je nog steeds een quickstart van een andere auteur zoeken, wat volgens mij niet de bedoeling is.