Archives


Master Symfony2 fundamentals

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

Discover the SensioLabs Support

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

Fabien Potencier
Symfony2: Getting easier
by Fabien Potencier – April 27, 2011 – 8 comments

With the release of the first beta approaching fast, our main focus has switched from adding new features to polishing existing ones.

Symfony2 has many great features. But sometimes, configuration feels a bit too complex, or the error messages are not friendly enough. We care a lot about these problems as these issues can lead to a lot of frustration.

Recently, Ryan and I have spent our time tweaking error messages, simplifying the code and the configuration, adding more documentation, and making things more consistent throughout the framework. The goal is to ease the learning curve and make things that people will need on a day to day basis simpler.

Let's see some examples of what we've done so far.

Better Twig Error Messages

Twig is a great time saver thanks to its concise syntax and its great automatic output escaping feature. Each time I need to edit an "old" template written in PHP, I'm really happy that this is just about legacy code (and apparently I'm not the only one)

One problem you might have encounter though is when something goes wrong during template compilation or at runtime. Sometimes, the exception message does not mention the original template name, nor the line where the problem happened; and of course, the PHP stack trace only has information about the cached PHP file. That makes debugging harder than it has to be. This has been "fixed" recently. Now, Twig tries very hard to always tell you where the error occurred in the original template file.

And on a totally unrelated note, Twig now also enjoys native support in PHPStorm.

Better Configuration Error Messages

What I've described above also apply to configuration errors. Here, we are talking about configuration files (in XML or YAML) instead of Twig templates. For instance, if you use a non-defined parameter in a service definition, you will have the following error message:

The service "%s" has a dependency on a non-existent parameter "foo".

And here is the old one:

You have requested a non-existent parameter "foo".

The new message instantly tells you what you need to look for.

Simpler Doctrine Configuration

Most projects will ever only use one database. But the Doctrine configuration syntax is "optimized" for when you need to be able to manage several database connections. This makes the configuration verbose, non-trivial to understand, and hard to teach:

doctrine:
    dbal:
        connections:
            default:
                dbname:   dbname
                user:     root
                password: ~

As of today, if you only need one database connection, you can use this simpler syntax:

doctrine:
    dbal:
        dbname:   sfweb
        user:     root
        password: ~

Configuring the ORM is also a pain point as every time you add a third-party bundle, you must remember to add it to the Doctrine mapping configuration. If you forget, you will have an error that won't really help you understand what you need to do to fix it.

If you only use one entity manager (which is again the most common use case), you can now just tell Doctrine to automatically load all bundle's mapping configuration:

orm:
    auto_mapping: true

For the record, here is the "old" minimal ORM configuration:

    orm:
        entity_managers:
            default:
                mappings:
                    BlogBundle: ~

The good news is that you can still fallback to the old syntax for the rare occasions where you need more than one database connection or more than one entity manager.

This post is really just a sample of what we are doing on a day to day basis. The good news is that *you** can help us make the framework better. Whenever you hit a wall because an error message is not clear, or because a syntax looks awkward, please tell us about it; write an email to the Symfony developer mailing-list and we will try to work together to make things better and easier. Expect more similar changes in the coming weeks.

Comments RSS

  • gravatar
    #1 Emmanuel PEREIRA said on the 2011/04/27 at 16:42
    Simplification of the configuration (too verbose) is a very good choice to recast, glad you are working on this. Thanks a lot.
  • gravatar
    #2 Andrei said on the 2011/04/27 at 17:47
    Hi Fabien, I have recently download the latest preview release, and it seems like some components, ie some bundles have been removed completely - to do with annotations for the routes, I have tried to put together a working package but I feel like guessing most of the time which bundles should be downloaded for the normal operation to match documentation that is provided on the website. My question is when are you expecting the framework to stabilize, so that it could be used for development,

    thanks
    A
  • gravatar
    #3 Robert Speer said on the 2011/04/27 at 20:53
    it may be useful to include a link to a forum page that finds or creates a thread for the most generic form of the error message.

    As well as maybe a counter image for how many times the error has ever occurred to gather aggregate stats for the most error prone parts of the framework.

    I realize this is a lot easier to type than it is to make happen, but could prove interesting.
  • gravatar
    #4 Christian said on the 2011/04/27 at 21:43
    I am happy to see you working on this. You and Ryan and all the others involved do a fantastic job!
    Symfony2 is very flexible and powerful by now. Now it is time to optimise for the common use cases.
    Keep up the good work!
  • gravatar
    #5 Ivan Rey said on the 2011/04/28 at 04:08
    This is great news! I have been missing "the easy(default) way" in Symfony2. I'll keep an eye and help whenever I can.
  • gravatar
    #6 François Zaninotto said on the 2011/04/28 at 06:44
    I'm very glad to see the direction you guys are taking lately. Symfony2 is not out yet, but it already has the reputation of being verbose, very complex, and using too much configuration. Your work on error messages and documentation smoothes the edges and is greatly appreciated.
  • gravatar
    #7 Horacio J. P. said on the 2011/04/28 at 13:45
    I just wanted to say that I love the new architecture in Symfony 2. It is already very usable, for such a powerful and flexible framework. I picked CI as my first framework (some years ago) due to its simplicity, clear docs, and my lack of OOP knowledge. But this is a totally different world, everything feels perfect, can't wait to see it finished.
    Please don't remove any feature just to make it simpler.
  • gravatar
    #8 Nathan said on the 2011/04/28 at 18:26
    **Great stuff**! I applaud this direction.

    Is there any chance the location for Doctrine schema files could be shortened? I made files like this for each entity:

    `src/Mycompany/MyBundle/Resources/config/doctrine/metadata/orm/Mycompany.MyBundle.Entity.Orderset.dcm.yml`

    But I'm like, "are you serious? What happened to `config/schema.yml`?"

    I like Larry Wall's philosophy about Perl - "make easy things easy and hard things possible".