New in Symfony 2.8: Final improvements
Warning: This post is about an unsupported Symfony version. Some of this information may be out of date. Read the most recent Symfony Docs.
This article is the last one in the New in Symfony 2.8 series. It explains five minor but useful improvements introduced in several Symfony components.
Added a non-static API for the CssSelector component
Christophe Coevoet in #15934.
In Symfony 2.7, the CssSelector component exposed a static API to convert the CSS selectors into XPath expressions. In Symfony 2.8, we added a new non-static API:
1 2 3 4 5 6 7 8 9 10
// Before use Symfony\Component\CssSelector\CssSelector; $expression = CssSelector::toXPath('div.item > h4 > a'); // After use Symfony\Component\CssSelector\CssSelectorConverter; $converter = new CssSelectorConverter(); $expression = $converter->toXPath('div.item > h4 > a');
This new API allows to keep a reference to the Converter object and all its internal object graph, which in some situations may be faster than recreating everything whenever you perform a conversion.
Besides, HTML is now selected as the default format. If you are working with XML
false as the argument of the
1 2 3 4 5
// Before use Symfony\Component\CssSelector\CssSelectorConverter; $converter = new CssSelectorConverter(false); $expression = $converter->toXPath('items > item > title');
This component is mostly used by Symfony developers through the DomCrawler component in their tests. In that case, this change doesn't affect you in any way and you don't have to make any additional change.
Added domain exceptions to the Console component
The Console component used generic PHP exceptions such as
LogicException. In Symfony 2.8, to make the component consistent with
other parts of the framework, custom exceptions are used.
These "domain exceptions" allow to generate better error messages. For example, when some command wasn't found, in some places we just threw this exception:
throw new \InvalidArgumentException($message);
Now, we throw this other custom exception which allows to define a series of alternative commands with similar names to the one not found:
throw new CommandNotFoundException($message, $alternatives);
These are the first custom exceptions defined for the Console component:
Added a new
ClassCache cache warmer
In order to improve performance and reduce I/O load, Symfony generates a big
classes.php file in the cache with the contents of the most accessed classes.
Bundles, including yours, can add new classes to this file through the
In Symfony 2.8, we added a new cache warmer that generates this
file. This new warmer removes the known slowness of the first hit to a Symfony
application (even when cache has been warmed up). Besides, this feature also
allows to make a Symfony application runnable on a read-only filesystem (such as
in a Docker container for example).
Allowed to warm up Twig templates in non-standard paths
Kevin Bond in #14764.
As you may know, Symfony applications can define custom Twig namespaces. Suppose
that you're using some third-party library that includes Twig templates that
vendor/acme/foo-bar/templates. You can refer to those templates as
@foo_bar/<template-name> if you define the following configuration:
1 2 3 4 5
# app/config/config.yml twig: # ... paths: "%kernel.root_dir%/../vendor/acme/foo-bar/templates": foo_bar
In Symfony 2.8, the templates defined under those custom namespaces will be automatically compiled during cache warm up. This will result in a (minor) performance improvement.
Allowed to configure a user checker per firewall
Lynn van der Berg
During the authentication of a user, additional checks might be required to
verify if the identified user is allowed to log in. Symfony performs these
checks with classes that implement the
Symfony. This interface defines
two methods called
checkPostAuth() to perform checks
before and after user authentication.
In Symfony 2.8, these user checkers became more useful because you can use a
custom user checker per firewall thanks to the new
1 2 3 4 5 6 7 8 9 10 11 12
services: app.admin_user_checker: class: App\Security\AdminUserChecker arguments: - "@request_stack" security: firewalls: secured_area: pattern: ^/admin # ... user_checker: app.admin_user_checker
Allowed to retrieve the priority of an event listener
Fabien Potencier in #16198.
One of the most common feature requests for the EventDispatcher component was
to add a method to retrieve the priority of the given event listener. In
Symfony 2.8 we finally included this method, called
to the different
This will help you figure out which priority is needed to override another event listener without digging in the sources. The first argument of the new method is the event name and the second argument is the listener:
1 2 3 4 5 6
$eventDispatcher->addListener('post.published', $listener, -10); $priority = $eventDispatcher->getListenerPriority('post.published', $listener); // $priority = -10 $priority = $eventDispatcher->getListenerPriority('wrong_event', $listener); // $priority = null
Help the Symfony project!
As with any Open-Source project, contributing code or documentation is the most common way to help, but we also have a wide range of sponsoring opportunities.
Comments are closed.
To ensure that comments stay relevant, they are closed for old posts.