Tracy Flight パネル拡張

これはFlightの作業をより豊かにするための拡張機能セットです。

  • Flight - すべてのFlight変数を分析。
  • Database - ページで実行されたすべてのクエリを分析(データベース接続を正しく初期化した場合)
  • Request - すべての$_SERVER変数を分析し、すべてのグローバルペイロード($_GET$_POST$_FILES)を調査
  • Session - セッションがアクティブな場合、すべての$_SESSION変数を分析。
  • Twig (オプション) - Twigテンプレートのレンダリング時間、メモリ、およびどのテンプレート/ブロック/マクロが実行されたかを分析(twig/twigtwig_profile設定が必要)

これは特にofficial skeletonで便利で、デフォルトでTwigを使用しています:同じレイアウトAIツールに従うと、Tracyバーにも明確に表示されます。

これがパネルです

Flight Bar

各パネルにはアプリケーションに関する非常に役立つ情報が表示されます!

Flight Data Flight Database Flight Request

コードを表示するにはこちらをクリックしてください。

インストール

composer require flightphp/tracy-extensions --devを実行すれば準備完了です!

Twigはパッケージのハード依存関係ではありません。Twigパネルが必要な場合のみtwig/twigをインストールしてください(スケルトンでは既にビュー用にインストールされています)。

設定

これを開始するために必要な設定はほとんどありません。Tracyデバッガーをこのhttps://tracy.nette.org/en/guideを使用する前に初期化する必要があります:

<?php

use Tracy\Debugger;
use flight\debug\tracy\TracyExtensionLoader;

// bootstrapコード
require __DIR__ . '/vendor/autoload.php';

Debugger::enable();
// 環境を指定する必要があるかもしれません:Debugger::enable(Debugger::DEVELOPMENT)

// アプリでデータベース接続を使用する場合、
// 開発専用(本番環境では使用しないでください!)に使用する
// 必要なPDOラッパーがあります
// 通常のPDO接続と同じパラメータを持っています
$pdo = new PdoQueryCapture('sqlite:test.db', 'user', 'pass');
// またはFlightフレームワークにこれをアタッチする場合
Flight::register('db', PdoQueryCapture::class, ['sqlite:test.db', 'user', 'pass']);
// これでクエリを実行するたびに時間、クエリ、パラメータがキャプチャされます

// ドットを接続します
if(Debugger::$showBar === true) {
    // Tracyが実際にレンダリングできないため、これをfalseにする必要があります :(
    Flight::set('flight.content_length', false);
    new TracyExtensionLoader(Flight::app());
}

// より多くのコード

Flight::start();

追加設定

セッションデータ

ghostff/sessionのようなカスタムセッションハンドラを使用している場合、任意のセッションデータ配列をTracyに渡すことができ、自動的に出力されます。TracyExtensionLoaderコンストラクタの2番目のパラメータのsession_dataキーで渡します。


use Ghostff\Session\Session;
// またはflight\Sessionを使用;

require 'vendor/autoload.php';

$app = Flight::app();

$app->register('session', Session::class);

if(Debugger::$showBar === true) {
    // Tracyが実際にレンダリングできないため、これをfalseにする必要があります :(
    Flight::set('flight.content_length', false);
    new TracyExtensionLoader(Flight::app(), [ 'session_data' => Flight::session()->getAll() ]);
}

// ルートやその他のもの...

Flight::start();

Twigパネル(オプション)

アプリがTwigを使用している場合(公式スケルトンを含む)、Tracyバーにテンプレートメトリクスを表示できます。TwigのProfileを作成し、ProfilerExtensionを環境にアタッチし、そのプロファイルをtwig_profileキーの下のローダーに渡します。開発時のみプロファイリングをアタッチしてください。

<?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,
]);

// オプション:テンプレートでTracyダンプヘルパーを公開
// {{ 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) {
    Flight::set('flight.content_length', false);
    new TracyExtensionLoader(Flight::app(), $tracyConfig);
}

// Flight::render()をTwigにマッピング(例)
Flight::map('render', function (string $template, array $data = []) use ($twig) {
    if (substr($template, -5) !== '.twig') {
        $template .= '.twig';
    }
    echo $twig->render($template, $data);
});

パネルに表示される内容

  • Twigの総レンダリング時間とメモリ
  • テンプレート/ブロック/マクロの呼び出し回数
  • レンダリングされた各テンプレートとその時間とメモリ

Twigタブは、リクエストでテンプレートがレンダリングされなかった場合、またはtwig_profileを省略した場合(またはTwigがインストールされていない場合)に非表示になります - 他のFlightパネルは引き続き動作します。

skeletonスタイルのservices.phpでは、デバッグがオンの時に同じ$profile/ProfilerExtensionを構築し、twig_profileTracyExtensionLoaderに渡し、$app->render()に共有Twig環境を使用し続けます。

Latte

このセクションではPHP 8.1+が必要です。

プロジェクトにLatteがインストールされている場合、Tracyにはテンプレートを分析するためのLatteとのネイティブ統合があります。Latteインスタンスに拡張機能を登録するだけです(これは上記のTwigパネルではなく、Latte独自のTracyブリッジです)。


require 'vendor/autoload.php';

$app = Flight::app();

$app->map('render', function($template, $data, $block = null) {
    $latte = new Latte\Engine;

    // その他の設定...

    // Tracyデバッグバーが有効な場合のみ拡張機能を追加
    if(Debugger::$showBar === true) {
        // ここでLatteパネルをTracyに追加
        $latte->addExtension(new Latte\Bridges\Tracy\TracyExtension);
    }

    $latte->render($template, $data, $block);
});

関連項目

  • Tracy - Flight用の基本Tracyセットアップ
  • Twig - スケルトンとTwigパネルで使用されるテンプレートエンジン
  • Templates - FlightがrenderをTwig/Latteにマッピングする方法
  • Installation - スケルトンにはdevにtracy-extensionsが含まれています