Symfony 2.7 includes countless code tweaks and improvements. A lot of them are minor changes that will increase your day-to-day productivity. In this article we introduce seven of those small but nice features.

Added a getParameter() shortcut method in the base controller

Contributed by
Hugo Hamon
in #14052.

Getting the value of a container parameter inside a controller is one of the most common frustrations when you start learning Symfony. You usually try to use the get() method first with no luck and then you try to use the inexistent getParameter() method. Luckily, Symfony 2.7 will add a new getParameter() shortcut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    public function indexAction()
    {
        // Symfony 2.6
        $value = $this->container->getParameter('param_name');

        // Symfony 2.7
        $value = $this->getParameter('param_name');

        // ...
    }
}

Added feedback about the Symfony version status

Contributed by
Wouter De Jong
in #13626.

Who wants to run an outdated Symfony version considering the great features introduced in each new release? Fortunately, starting from Symfony 2.7, it will be harder to run an outdated version. The reason is that the web debug toolbar will include a visual feedback about the status of your Symfony version:

Symfony Version Feedback

Displayed the HTTP status in profiler search results

Contributed by
Alexander Schwenn
in #13034.

Sometimes it's hard to look for a specific request among all the requests stored by the Symfony profiler. In Symfony 2.7 this will be a bit easier thanks to the new column that displays the HTTP status of each request.

Symfony Profiler HTTP Status information

Please note that if you store the profiler information in a database of type MySQL or SQLite, you must drop the existing table or add the new status_code column manually.

Add support for container parameters in route conditions

Contributed by
Nikita Nefedov
in #12960.

In Symfony 2.7, route conditions now support using container parameters in their expressions. Just wrap the parameter names with % characters and Symfony will replace them by their values before evaluating the expression:

1
2
3
4
5
# app/config/routing.yml
contact:
    path:     /contact
    defaults: { _controller: AcmeDemoBundle:Main:contact }
    condition: "request.headers.get('User-Agent') matches '%allowed_user_agents%'"

Please note that this change introduces a minor BC break in some edge cases. If your expression uses the modulo operator in this way: foo%bar%2, Symfony 2.6 will parse it as $foo % $bar % 2 and Symfony 2.7 will replace %bar% by the value of the bar container parameter or it will raise an error if it doesn't exist.

Moved lint commands to the lint: namespace

Contributed by
Abdellatif Ait boudad
in #14116.

In the past we moved all Symfony debug commands to the debug: namespace in order to better group commands by function. Symfony 2.7 does the same with the lint commands used to discover syntax errors in YAML files and Twig templates:

1
2
3
4
5
6
7
# Symfony 2.6
$ php app/console yaml:lint ...
$ php app/console twig:lint ...

# Symfony 2.7 (the old command names also work)
$ php app/console lint:yaml ...
$ php app/console lint:twig ...

This may seem as a negligible change, but grouping debug commands under debug: and lint commands under lint: makes the framework more consistent and that's always a good thing.

Add support for linting multiple Twig templates

Contributed by
Miroslav Šustek
in #13548.

In Symfony 2.7 you can pass any number of files and/or directories to the lint:twig command:

1
2
3
4
5
6
7
8
9
10
# Symfony 2.6 (one template or one directory)
$ php app/console lint:twig app/Resources/views/base.html.twig
  1/1 valid files

$ php app/console lint:twig app/Resources/views/blog/
  4/4 valid files

# Symfony 2.7 (any number of files and/or directories)
$ php app/console lint:twig app/Resources/views/base.html.twig app/Resources/views/blog/
  5/5 valid files

Automatically restart the built-in web server

Contributed by
Wouter De Jong
in #14198.

Using the PHP built-in web server is increasingly common while developing applications. You probably use the server:run command available since Symfony 2.2. However, starting from Symfony 2.6 you can also use the server:start, server:status and server:stop commands.

The only drawback is that the server:start command requires the pcntl extension to run. In Symfony 2.7, if you execute server:start and you don't have the pcntl extension, Symfony will automatically execute the server:run command.

Be an active member of the community

All these improvements have been proposed and implemented by the amazing Symfony Community. If you also want to become an active community member, read the Symfony contributing guides and consider proposing new ideas, sending pull requests and reviewing the code submitted by other developers.

Published in #Living on the edge