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¶

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:

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. 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.