Tracy Extensions
#Tracy Flight Panel Extensions
This is a set of extensions to make working with Flight a little richer.
- Flight - Analyze all Flight variables.
- Database - Analyze all queries that have run on the page (if you correctly initiate the database connection)
- Request - Analyze all
$_SERVERvariables and examine all global payloads ($_GET,$_POST,$_FILES) - Session - Analyze all
$_SESSIONvariables if sessions are active. - Twig - Analyze Twig template render time, memory, and which templates/blocks/macros ran (optional; requires
twig/twig)
This is the Panel
And each panel displays very helpful information about your application!
#Installation
Run composer require flightphp/tracy-extensions --dev and you're on your way!
#Configuration
There is very little configuration you need to do to get this started. You will need to initiate the Tracy debugger prior to using this https://tracy.nette.org/en/guide:
<?php use Tracy\Debugger; use flight\debug\tracy\TracyExtensionLoader; // bootstrap code require __DIR__ . '/vendor/autoload.php'; Debugger::enable(); // You may need to specify your environment with Debugger::enable(Debugger::DEVELOPMENT) // if you use database connections in your app, there is a // required PDO wrapper to use ONLY IN DEVELOPMENT (not production please!) // PdoQueryCapture extends Flight's SimplePdo (recommended) so you get all the // helper methods (fetchAll, insert, update, etc) + automatic query capture for Tracy. // It has a constructor compatible with PDO/SimplePdo. $pdo = new PdoQueryCapture('sqlite:test.db', 'user', 'pass'); // or if you attach this to the Flight framework Flight::register('db', PdoQueryCapture::class, ['sqlite:test.db', 'user', 'pass']); // now whenever you make a query (via any method) it will capture the time, query, and parameters // For full APM query tracking (beyond Tracy), install flightphp/apm and use: // $db->logQueries() or enable via options; it fires the 'flight.db.queries' event. // This connects the dots if(Debugger::$showBar === true) { new TracyExtensionLoader(Flight::app()); } // more code Flight::start();
#Twig panel (optional)
If your app uses Twig, you can show template metrics on the Tracy bar. Create a Twig Profile, attach ProfilerExtension to your environment, then pass that profile into the loader. Attach profiling only in development.
<?php use flight\debug\tracy\TracyExtensionLoader; use flight\debug\tracy\TwigTracyExtension; use Tracy\Debugger; use Twig\Environment; use Twig\Extension\ProfilerExtension; use Twig\Loader\FilesystemLoader; use Twig\Profiler\Profile; $loader = new FilesystemLoader(__DIR__ . '/views'); $twig = new Environment($loader, [ 'debug' => true, 'cache' => false, ]); // Optional: expose Tracy dump helpers in templates ({{ dump(var) }}, {{ bdump(var) }}, {{ dumpe(var) }}) $twig->addExtension(new TwigTracyExtension()); $tracyConfig = []; if (Debugger::$showBar === true) { $profile = new Profile(); $twig->addExtension(new ProfilerExtension($profile)); $tracyConfig['twig_profile'] = $profile; } if (Debugger::$showBar === true) { new TracyExtensionLoader(Flight::app(), $tracyConfig); } // Map Flight::render() to Twig (example) Flight::map('render', function (string $template, array $data = []) use ($twig) { if (substr($template, -5) !== '.twig') { $template .= '.twig'; } echo $twig->render($template, $data); });
The panel lists total render time/memory, template/block/macro call counts, and each template that rendered with its own time and memory. The Twig tab is hidden when no templates were rendered for the request.