Once you're on 2.8, there's a new game: find and fix deprecation notices. But there's
a catch! You won't hit all of your code paths at runtime. Some code paths are only
executed when the cache is being built. To hit those, start by clearing the cache:
rm -rf var/cache/*
Refresh the page and click into the deprecated calls on the Web Debug Toolbar.
Ok, here's the really tricky thing about deprecation notices: many of them are
not your fault. Yep, a lot of notices come from all of those lazy third-party bundles
you're using in your project. So to start, let's find out what outside bundles are
causing problems... before we worry about fixing our stuff.
The first deprecation - about not quoting @ symbols in YAML is our fault.
Not quoting a scalar starting with '@' is deprecated since Symfony 2.8
But it's not easy to see: you need to study the stack trace. This ultimately starts
with AppKernel::registerContainerConfiguration() where our configuration files are
The second is complaining about bad configuration in security.yml: that's also
our fault, and we'll fix it in a minute.
But look at the third warning:
The Symfony\Component\DependencyInjection\Reference::isStrict method is
deprecated since version 2.8
Look closely at the LoggerChannelPass: that's coming from MonologBundle. That's
the first outside bundle that needs to be updated.
Below that, the knp_pagination Twig extension problem is obviously coming from
But before you upgrade those, go back and refresh again. This time the page pulls
from the cache, and that can sometimes cause different deprecation notices to show
The class "Symfony\Bundle\AsseticBundle\Config\AsseticResource" is performing
resource checking through ResourceInterface::isFresh(), which is deprecated
This deprecation warning comes from AsseticBundle: that's our third troublesome
Notice I'm not tweaking their version constraints in composer.json. Maybe I will
need to do this, but I'll take the lazy route first and hope that upgrading these
to the newest version allowed by their existing constraints will be enough.
Let's see what happens!
Cool! This downloaded some patch version updates, which may have solved our problem...
or maybe it didn't. Clear the cache and go refresh:
rm -rf var/cache/*
Click into the deprecations. Now the notices are down to 5 and they're coming from
our code. Problem solved! But wait, refresh again. Huh, now there are 32 notices:
the ones from AsseticBundle are back! The new version of AsseticBundle did not
fix that problem.
Google for AsseticBundle and go to its Github Page.
The first thing to look for is a release that has Symfony 3 support. Huh, there is
one that claims support: version 2.7.1. And that is the version of the library
we just downloaded. Usually, this means you're fine... but clearly it's not fine:
we're still getting deprecated notices! What's going on AsseticBundle!
In fact, at the time of recording, this bundle claims Symfony 3 support, but it doesn't
quite have it: there's one pull request that still needs to be merged. By the time
you're watching this, it'll hopefully be merged and you'll happily get the 2.7.2
But I'm glad this happened: it uncovers the most difficult part of upgrading to
Symfony 3. If you use a lot of outside bundles, they might not all be ready immediately
when Symfony 3 is released. In fact, some might not be updated a month later. Your
job is to check the repository, see if there is a Symfony 3-compatible release, and
open up a friendly issue if there isn't.
For right now, until this is merged, there's nothing we can do. So let's ignore these
deprecations and fix everything else.