Master Symfony2 fundamentals

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).

Discover the SensioLabs Support

Access to the SensioLabs Competency Center for an exclusive and tailor-made support on Symfony

Fabien Potencier
Symfony 2.0 and the PHP Ecosystem
by Fabien Potencier – March 04, 2010 – 18 comments

Unless you've been living under a rock, you have already heard a lot about Symfony 2. The buzz on the Internet, and especially on Twitter and on blogs, have been terrific so far. Today, I won't really talk about the Symfony 2 features. If you want to give Symfony 2 a try, you'd better read the "Quick tour" tutorial on the Symfony reloaded website. This post is more about one key aspect of the Symfony 2 philosophy. Hopefully, it will help you better understand the reasoning behind most of our decisions.

Symfony 2 is all about having a better core architecture. The old Mojavi classes are now all gone. They have been replaced with a more flexible foundation. This will allow Symfony to be used to develop both very small websites like personal homepages and also very big ones that have specific needs. The new architecture also gives us the opportunity to fix the mistakes we made in symfony 1 and to incorporate all the feedback we received during the last four years.

Symfony 2 still aims to be a full-stack framework but with a slightly different philosophy. You know that we don't like to reinvent the wheel, and so symfony 1 is already built on top a lot of different third-party libraries (Propel, Doctrine, Swiftmailer just to name a few). For Symfony 2, we have decided to take it to the next level. The Symfony core team will concentrate more on providing a great low-level architecture and we will rely even more on third-party libraries whenever possible for everything else.

The first visible decision we made was to replace our logger and caching libraries with the Zend Framework ones. We spent a lot of time writing these classes and maintaining them over the years, but whenever we take a decision for Symfony 2, we try to think about what is best for the project in the long run. It's never about personal ego.

But of course, we won't use a library just because it exists. Five years ago, I decided to create lime for our unit tests, instead of using an existing library like SimpleTest or PHPUnit. And I did that for some good reasons: among them, I wanted a simple way to write unit tests to lower the barriers of entry to unit testing. But things have changed a lot since then. First, PHPUnit is now the de-facto standard library for unit testing, and PHP developers are more comfortable with the whole testing concept. So, the core team has decided to switch from lime to PHPUnit for Symfony 2.

I like what Paul Lomax tweeted some days ago about that: "Use what's out there; realise it sucks; write your own; wait until others suck less; dump your own; use other."

Using PHPUnit instead of lime basically means we have less code to maintain ourselves. It's like having Sebastian Bergmann on board; one more great PHP developer helping us making Symfony better. But using PHPUnit also has a lot of other advantages:

  • We will play well with others (Zend Framework, Doctrine, Propel, ...);
  • You will have better integration with tools like IDEs, Continuous Integration servers, ...;
  • You will benefit from features that are not available in lime;
  • You will have less Symfony-specific things to learn.

Bernhard will keep on working on Lime 2, but he will also have more time to work on core Symfony features like the new form framework.

Using third-party projects is great but only if they can be integrated into the Symfony core in a cohesive and transparent way. That's where the Dependency Injection Container comes into play. Symfony 2 is entirely built around a Dependency Injection Container. Besides the flexibility it gives to the developer, it's also a great way to easily integrate third-party code. If you are curious, have a look at the DoctrineBundle plugin or the Swiftmailer one to see what I mean.

Keep in mind that Symfony 2 is not ready for prime time. We have published a preview release to gather feedback early in the process. So, feel free to play with the new code base and don't hesitate to provide as much feedback as possible.

Comments RSS

  • gravatar
    #1 Gareth said on the 2010/03/04 at 14:45
    Its great that the Symfony 2 devs are looking at re-use of existing libraries to enhance and make Symfony better, but I would recommend some caution. Start using too many libraries and you give up control. Also, you can start turning into nothing more than a patchwork of everything else.

    Symfony must be careful not to lose what makes symfony (note the change in case :P) great. I'd honestly prefer a delay in release because core developers want to get their own better way of doing things incorporated than just "selling out" to get things done.
  • gravatar
    #2 Chris Sedlmayr (catchamonkey) said on the 2010/03/04 at 14:48
    The dependency injection foundation that Symfony 2 has is great. I'm starting to use it of course and feedback will no doubt be plentiful!

    P.S. Great talk at #phpuk2010 !
  • gravatar
    #3 Fabien said on the 2010/03/04 at 15:26
    @Gareth: I understand your point and be reassured that we won't always use third-party libraries. We evaluate the alternative solutions quite extensively before making the switch. Using the ZF logger was a no-brainer. Switching to PHPUnit was less evident at first. And for core technologies, we will provide our own for sure: that will be the case for the form framework, security, ...
  • gravatar
    #4 EmiV said on the 2010/03/04 at 16:18
    Great post Fabien, I thought that your decision about PHPUnit is excellent.
    The Dependecy Injection is awsome.
  • gravatar
    #5 Robert Speer said on the 2010/03/04 at 17:32
    Impressive. I'm confident that Symfony will continue to innovate quickly while sunk costs are ignored and the focus stays on the frameworks core value.
  • gravatar
    #6 TheSorrow said on the 2010/03/04 at 17:52
    Great post!
    Is Symfony 2 will use Zend_Cache 1.* or 2.* ?
  • gravatar
    #7 Tobias said on the 2010/03/04 at 22:25
    I personally hope that the routing gets improved. I agree that's its easy and often sufficient. But sometimes it's limiting the URL schema very much. E.g. you cannot use many different seperators like /, _ and - in one url. Yes I know there is the seperator option but I mostly doesn't work the right way. Maybe include a regular expression routing with named subpatterns (a nice feature in PHP regex). Also a REST architecture is not very easy to build with it.
    I think Zend Routing solved this better.
  • gravatar
    #8 Matías said on the 2010/03/05 at 02:21
    My opinion is that the Symfony framework is being renew in a better structure that looks more simple and powerful. The only thing that worry me is how I'll update my current projects to Symfony 2 in the future.. anyway I'm happy that I've chosen Symfony.
  • gravatar
    #9 Tiago Ferreira said on the 2010/03/05 at 12:29
    Will Symfony 2 come with Doctrine 2? :D
  • gravatar
    #10 Ron said on the 2010/03/06 at 05:02
    Is there anything Symfony 2 can learn from ASP .Net MVC 2.0?

    Attributes enclosed in brackets for example: [Required] [HandleError] etc...
  • gravatar
    #11 Carlos said on the 2010/03/06 at 05:06
    MongoDB ORM built in? ElasticSearch?
  • gravatar
    #12 John Q said on the 2010/03/06 at 05:09
    Built-in LDAP Authenticaton classes would be great!
  • gravatar
    #13 Romain said on the 2010/03/06 at 13:53
    Good coders code, great coders reuse...
  • gravatar
    #14 Jonathan Nieto said on the 2010/03/06 at 20:08
    Almost two years ago I started with symfony and discovered a whole world of a new better way of making things easier and faster (with a little steep learning curve, though ;) ). Now with upcoming release of Symfony 2 and all its new features I must say It was the right decision then and now to use it.

    I think use Zend_Cache and Zend_Log in Symfony 2 was a brilliant move!

    Excellent work guys!

    @Tiago: I think that's more than sure.
  • gravatar
    #15 petersaints said on the 2010/03/09 at 20:17
    My big question is... I'll ve developing a Symfony 1.4 application in the following months. Will it be possible to upgrade do Symfony 2.0 once it's released easily or not?
  • gravatar
    #16 Me Again said on the 2010/03/10 at 11:33
    It's very nice to see that you embraced the de-facto standard when it comes to unit testing.

    Maybe this would be a good time to embrace the de-facto standard when it comes to coding style as well (4 spaces for indentation, opening brace at the end of the line for control structures).
  • gravatar
    #17 frko said on the 2010/03/10 at 15:21
    Isn't PHPUnit based on PEAR and therefore introducing additional dependencies, like on the awfull PEAR library?
  • gravatar
    #18 Gert said on the 2010/03/22 at 12:25
    Like petersaints, we are also starting a new large project that has to be up and running by August. I would also like to know how much effort it will be to upgrade from 1.4 to 2.0. As far as ORM is concerned, we have always used Propel, but it looks like we'd better start using Doctrine on this project, since Propel will no longer be supported in Symfony 2.0.