Symfony becoming a common ground for mid and big-sized teams working with PHP
First to give some context to this post. I am the co-owner of Netgen, a web development agency which uses eZ Publish as a base for most of web projects. We used to make extensions and integrations in more or less pure PHP, occasionally using some libs. There were many incentives to consider PHP frameworks, but we never did. When eZ Systems announced 2 years ago that the new version of eZ Publish will be based on Symfony, we were finally ass-kicked to invest time and learn a framework that will help us be more efficient and productive by not reinventing the wheel all the time.
Anyway, in last 2 years we’ve done a few projects based only on Symfony and have also done several projects on the eZ Publish new stack (current version is 5.3) which is based on Symfony. We are still not great experts in the Symfony framework but we’re already benefiting from the endeavour. When you work in a team, you really want to have as much common ground as possible. If every team member is doing stuff on their own, it becomes very hard to maintain project code and also very hard to switch developers between projects. So a team should either invent their own conventions or embrace external ones.
Over the years, we have embraced the eZ conventions for content management work and have extended them with our own. In a similar way we are now embracing Symfony conventions. We will still base our new content centric projects on eZ, but empower it with Symfony know-how to customize, extend and integrate. We will also build web apps that are more feature oriented solely on Symfony.
So far the story isn’t that interesting for global audience, but I am getting there, stay with me
It seems that eZ Systems is not the only one thinking that Symfony is a very good common ground for products. The Symfony community, led by its creator Fabien Potencier, did an amazing job with Symfony2:
- performant and modern architecture
- joining forces with other great PHP projects like Doctrine
- separated in many components
- letting each components be used independently
- extensive documentation (rare beast in open-source projects)
- adopting recent object oriented PHP traits and other important concepts like dependency injection
And many, many more good things
This has enabled greater Symfony usage and its community is gaining more and more momentum. Projects like Drupal and phpBB are using a lot of components independently. Even some other frameworks, like Laravel, are using Symfony components.
This is starting to be very interesting for bigger projects where you might need multiple products to fulfil the scope. Someone who knows Drupal or eZ might integrate phpBB with less hassle than before.
There are also new products that are developed completely with the full stack Symfony framework. Besides eZ Publish, which is basically refactoring everything, there are also Akeneo PIM, OroCRM and Sylius. There are probably more out there too.
Besides products being developed on top of Symfony, things are changing in custom PHP development. A few month ago, a big web development agency from our town decided to start using Symfony as a base for their homegrown CMS. A few days ago I was told that a web development team in a bank from my town is switching to Symfony too.
Is this just a coincidence or evidence that Symfony is the main PHP framework of choice already, well, at least for mid-sized and big teams working with PHP. There are, of course, many other frameworks, many of them suitable for different situations, simpler or more specialised. There is also Zend, but to be honest I don’t know much about it. And recently, I haven’t heard much about it either. Maybe I am just biased or not informed. Although, there are plenty of surveys and polls where Symfony usually beats Zend.
With 2 year experience as a Symfony developer and project manager, I find it very effective for our use case. We tend to use mature open source code (from standard Symfony components to the eZ Publish new stack with the legacy stack as a fallback), and the possibility to extend the code is vital. With Symfony’s Service Container (Dependency Injection component), it’s possible to do so very elegantly. For performance we lean on the HTTP cache implementation and use Varnish with ESI. It’s almost native to Symfony. Pulling usable bundles with Composer is also a breeze. The MVC implementation is quite strict as you can’t do much in Twig, so it forces you to do things the right way.
To conclude, Symfony is not the only option but it’s definitely the best option at this moment when several people work together in PHP and implement less-than-simple projects or products.
By using Symfony and the eZ Publish new stack as well, we at Netgen are members of two communities, constantly trying to build the bridge between. In that direction we are organising the PHP / eZ Publish Summer Camp this September. It will be a great chance to learn a lot about Symfony and about the new eZ stack. And also to discuss all of us at Netgen and KNP Labs, so meet us there