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!
Run composer require flightphp/tracy-extensions --dev and you're on your way!
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();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.



