gstreamer0.10-ffmpeg
gstreamer0.10-plugins-good
packages.
Make sure you've committed all of your changes - I already did. Because we're about to install something super fun! Like, floating around space fun! Run:
composer require profiler --dev
The profiler - also called the "web debug toolbar" is probably the most awesome thing in Symfony. This installs a few packages and... one recipe! Run:
git status
Ok cool! It added a couple of configuration files and even some routes in the dev
environment only that help the profiler work. So... what the heck is the profiler? Go back to your browser, make sure you're on the article show page and refresh! Voilà!
See that slick black bar at the bottom of the page! That's the web debug toolbar! It's now automatically injected at the bottom of any valid HTML page during development. Yep, this JavaScript code makes an AJAX call that loads it.
Oh, and it's packed with info, like which route was matched, what controller was executed, execution time, cache details and even information about templates.
And as we install more libraries, we're going to get even more icons! But the really awesome thing is that you can click any of these icons to go into... the profiler.
OoooOoo. This takes us to a totally different page. The profiler is like the web debug toolbar with a fusion reactor taped onto it. The Twig tab shows exactly which templates were rendered. We can also get detailed info about caching, routing and events, which we'll talk about in a future tutorial. Oh, and my personal favorite: Performance! This shows you how long each part of the request took, including the controller. In another tutorial, we'll use this to dig into exactly how Symfony works under the hood.
When you're ready to go back to the original page, you can click the link at the top.
But wait, there's more! The profiler also installed Symfony's var-dumper
component. Find ArticleController
and go to showAction()
. Normally, to debug, I'll use var_dump()
to print some data. But, no more! Instead, use dump()
: dump the $slug
and also the controller object itself:
... lines 1 - 8 | |
class ArticleController extends AbstractController | |
{ | |
... lines 11 - 21 | |
public function show($slug) | |
{ | |
... lines 24 - 28 | |
dump($slug, $this); | |
... lines 30 - 34 | |
} | |
} |
Ok, refresh! Beautiful, colored output. And, you can expand objects to dig deeper into them.
Tip
To expand all the nested nodes just press Ctrl
and click the arrow.
The dump()
function is even more useful in Twig. Inside the body
block, add {{ dump() }}
:
... lines 1 - 4 | |
{% block body %} | |
{{ dump() }} | |
... lines 7 - 29 | |
{% endblock %} |
Tip
If you don't have Xdebug installed, this might fail with a memory issue. But don't worry! In the next chapter, we'll install a tool to make this even better.
In Twig, you're allowed to use dump()
with no arguments. And that's especially useful. Why? Because it dumps an associative array of all of the variables you have access to. We already knew we had title
and comments
variables. But apparently, we also have an app
variable! Actually, every template gets this app
variable automatically. Good to know!
But! Symfony has even more debugging tools! Let's get them and learn about "packs" next!
// composer.json
{
"require": {
"php": "^7.1.3",
"ext-iconv": "*",
"sensio/framework-extra-bundle": "^5.1", // v5.1.3
"symfony/asset": "^4.0", // v4.0.3
"symfony/console": "^4.0", // v4.0.14
"symfony/flex": "^1.0", // v1.17.6
"symfony/framework-bundle": "^4.0", // v4.0.14
"symfony/lts": "^4@dev", // dev-master
"symfony/twig-bundle": "^4.0", // v4.0.3
"symfony/web-server-bundle": "^4.0", // v4.0.3
"symfony/yaml": "^4.0" // v4.0.14
},
"require-dev": {
"easycorp/easy-log-handler": "^1.0.2", // v1.0.4
"sensiolabs/security-checker": "^5.0", // v5.0.3
"symfony/debug-bundle": "^3.3|^4.0", // v4.0.3
"symfony/dotenv": "^4.0", // v4.0.14
"symfony/monolog-bundle": "^3.0", // v3.1.2
"symfony/phpunit-bridge": "^3.3|^4.0", // v4.0.3
"symfony/profiler-pack": "^1.0", // v1.0.3
"symfony/var-dumper": "^3.3|^4.0" // v4.0.3
}
}