I’ve now had the pleasure of developing two line of business applications using two very contrasting versions of the Symfony framework in PHP/MySQL. Whereas symfony 1.0 allowed you to generate custom CRUD (create, read, update and delete) interfaces by editing simple human-readable config files and overriding simple functions, new symfony 1.2 systems require you to understand badly documented APIs (more on that later), PHP’s OO programming quirks, the exact method call order of the new forms framework and write completely new classes to provide custom filter functionality. 1.1 was an interim version that left in backward compatibility.
Imagine you want to add a custom filter to the standard object lists that require custom joins or subselects on columns not in the object’s table. We want an extra filter called “is_missing_address”:
- Add “is_missing_address” and boolean type to the list in generator.yml
- Override the addFilterCriteria() method in the actions.php file to add the custom SQL when the “is_missing_address” filter is active
- Add “is_missing_address” to the filters list in generator.yml
- Add the sfWidgetFormChoice() Widget with all the select tag values to the list of Widgets in the Filters form class’s configure() method
- Add the sfValidatorChoice() class to the list of Validators
- Override the getValues() method of the filter form to include “is_missing_address” and a custom criteria method name
- Add a method such as addMissingAddressColumnCriteria() to the filter form class that adds the custom SQL
There are benefits to doing it the 1.2 way once you know what you are doing, but it is extremely complicated before you get your head around it. 1.0 was vastly more accessible partly in due to its amazing documentation.
I learnt symfony 1.0 by reading The Definitive Guide to symfony, written by the two lead developers. This was a fantastic book, detailed and simple. It was also clearly written (mainly by Francois Zaninotto) and obviously properly proofread before publishing.
The two lead developers have appeared to have a massive falling out after 1.0 was finished and massive changes brought in. The main author of the book has quit the project entirely after attempting to document the new changes and realising that 1.2 is only powerful and not simple. Simplicity and speed of development is probably the only two reasons anyone would want to use symfony in the first place (and probably PHP) – both of these points have been removed. The new documentation is full of French-lish such as “Softwares” and the homepage has what can only be described as non-native english. I believe parts of 1.0 were written with the documentation in mind (Documentation Driven Development), but 1.2 appears to have been made as powerful as possible, gaining maybe 10% more functionality at the expense of being easy to learn.
You do get what you pay for however, and symfony is free to use. I would not pay to use it when money gets you access to something like ASP.NET MVC now with fantastic MSDN documentation (there are free versions but it still requires a Windows server to host with). The symfony developers offer expensive training workshops – if the framework was still designed with simplicity in mind, you wouldn’t need training workshops or “symfony camps”.
The standard response to negative comments on open source projects appears to be “why don’t you volunteer to fix some bugs or correct some documentation?”. If I did that, it wouldn’t be free now would it?