flightphp / tracy-extensions
A few Flight specific extensions for Tracy Debugger to help debug your code quickly.
Requires
- php: >=8.0
- flightphp/core: ^3.18.0
- tracy/tracy: ^2.10
Requires (Dev)
- ghostff/session: ^2.1
- phpunit/phpunit: ^9.6
- rregeer/phpunit-coverage-check: ^0.3.1
- twig/twig: ^2.15 || ^3.0
Suggests
- twig/twig: Required to use the Twig Tracy bar panel (pass a Twig\Profiler\Profile via TracyExtensionLoader config)
README
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.



