TRAJOIN is an Application to Translate symfony documents Jointly.
home > 1.2/cookbook/en > web_debug_toolbar.txt
[1] Edit ↑TOPsymfonyのウェブデバッグツールバーは開発者のベストフレンドの1つです。開発環境で使うとき常にブラウザで手軽にアクセスできます。これは現在のページに関して知る必要があるすべての情報をあなたに伝えアプリケーションのデバッギングを楽にします。そして最高のニュースウェブデバッグツールバーは完全に思い通りに設定できることです。
設定無しでは、デフォルトのツールバーの外見は次の通りです:

ツールバーはパネルで構成されます。それぞれのパネルはタイトルとオプションのパネルの内容で構成され、パネルはPHPのオブジェクトで表現されます。デフォルトでは、7つのパネルが存在します:
| 名前 | クラスの名前 | 説明 |
|---|---|---|
| symfony version | sfWebDebugPanelSymfonyVersion |
![]() |
| cache information | sfWebDebugPanelCache |
![]() |
| configuration | sfWebDebugPanelConfig |
![]() |
| logs | sfWebDebugPanelLogs |
![]() |
| database information | sfWebDebugPanelDatabase |
![]() |
| memory usage | sfWebDebugPanelMemory |
![]() |
| timer | sfWebDebugPanelTimer |
![]() |
アプリケーションもしくはプロジェクトの設定ファイルの中でdebug.web.load_panelsイベントをリスニングすることでウェブデバッグツールバーをカスタマイズできます。次のコードはフロントエンドの設定クラスの中でこのイベントをリスニングする方法を示しています:
<?php
class frontendConfiguration extends sfApplicationConfiguration
{
public function configure()
{
// ...
$this->dispatcher->connect('debug.web.load_panels', array($this, 'configureWebDebugToolbar'));
}
}
この設定を適切に行うことで、symfonyはウェブデバッグツールバーを初期化するときに自動的にconfigureWebDebugToolbar()メソッドを呼び出します。このメソッドはパネルを削除、置き換えもしくは追加できます。
すべてのリスナーに関しては、symfonyはイベントを引数としてconfigureWebDebugToolbar()メソッドを呼び出します。イベントの題目は操作したいウェブデバッグツールバーのオブジェクトです:
<?php
class frontendConfiguration extends sfApplicationConfiguration
{
public function configure()
{
$this->dispatcher->connect('debug.web.load_panels', array($this, 'configureWebDebugToolbar'));
}
public function configureWebDebugToolbar(sfEvent $event)
{
$webDebugToolbar = $event->getSubject();
}
}
パネルを削除するためには、次のようにパネルの名前でremovePanel()メソッドを呼び出します:
<?php
class frontendConfiguration extends sfApplicationConfiguration
{
// ...
public function configureWebDebugToolbar(sfEvent $event)
{
$webDebugToolbar = $event->getSubject();
$webDebugToolbar->removePanel('memory');
}
}
パネルを置き換えるためには、既存の名前でsetPanel()メソッドを呼び出します。
パネルを作るためには、同じsetPanel()メソッドを呼び出しますがユニークな新しい名前を渡します。
もちろん、同じ情報を追加もしくは削除するために既存のパネルを拡張することができます。説明のために、リスポンスオブジェクトの範囲内に登録されたJavaScriptとスタイルシートのファイルを表示する真新しいパネルを作ってみましょう:
<?php
class frontendConfiguration extends sfApplicationConfiguration
{
// ...
public function configureWebDebugToolbar(sfEvent $event)
{
$webDebugToolbar = $event->getSubject();
$webDebugToolbar->setPanel('assets', new sfWebDebugPanelAssets($webDebugToolbar));
}
}
sfWebDebugPanelAssetsクラスを作る必要があります。すべてのパネルクラスはsfWebDebugPanelを拡張しなければならず少なくとも3つの抽象メソッドを実装する必要があります:
getTitle(): ウェブデバッグツールバーに表示されるHTMLを返します。これがnullを返すとき、パネルは表示されません。getPanelContent(): パネルのHTML表現を返します。これがnullを返すとき、タイトルはクリックできません。getPanelTitle(): 表示されるときにパネルのタイトルを返します。この情報を頭の中に入れた上で、下記のコードによって最少のパネルがおそらく動作するはずです:
<?php
class sfWebDebugPanelAssets extends sfWebDebugPanel
{
public function getTitle()
{
return 'assets';
}
public function getPanelTitle()
{
return 'Stylesheet and JavaScript files from sfWebResponse';
}
public function getPanelContent()
{
return null;
}
}
これはウェブデバッグツールバーの中で新しい'assets'のエントリを表示しますが、パネルの内容は空なのでテキストをクリックすることはできません。
内容をパネルに追加して少し面白いものにしてみましょう。レスポンスオブジェクトは2つのメソッド、getJavascripts()とgetStylesheets()を持ち、3つのメソッドはレスポンスオブジェクトによって含まれるJavaScriptとスタイルシートのファイルの配列を返します。
getPanelContent()メソッドはパネルの内容をコンストラクトするためにこれらの2つの配列をイテレートしてこれをHTMLの文字列として返します:
<?php
class sfWebDebugPanelAssets extends sfWebDebugPanel
{
// ...
public function getPanelContent()
{
$response = sfContext::getInstance()->getResponse();
$html = '';
if ($stylesheets = $response->getStylesheets())
{
$html .= '<h2>Stylesheets</h2><ul>';
foreach ($stylesheets as $file => $options)
{
$html .= sprintf('<li><strong>%s</strong> %s</li>', stylesheet_path($file), count($options) ? '('.var_export($options, true).')' : '');;
}
$html .= '</ul>';
}
if ($javascripts = $response->getJavascripts())
{
$html .= '<h2>Javascripts</h2><ul>';
foreach ($javascripts as $file => $options)
{
$html .= sprintf('<li><strong>%s</strong> %s</li>', javascript_path($file), count($options) ? '('.var_export($options, true).')' : '');;
}
$html .= '</ul>';
}
return $html;
}
}
symfonyのページの結果は次の通りです:

新しいパネルをパッケージしてsymfonyのプラグインとして配布することもできます。
ユーザーがプラグインをインストールするとき、以前我々が行ったようにイベントリスナーを追加するために設定クラスを変更してよいか問い合わせることができますが、次のようにプラグインのconfig.phoファイルの中でweb.debug.load_panelsイベントに接続することもできます:
<?php
// ...
require_once '/path/to/sfWebDebugPanelAssets';
$this->dispatcher->connect('debug.web.load_panels', array('sfWebDebugPanelAssets', 'listenToAddPanelEvent'));
それから、listenToAddPanelEvent()メソッドをsfWebDebugPanelAssetsクラスに追加します:
class sfWebDebugPanelAssets extends sfWebDebugPanel
{
static public function listenToAddPanelEvent(sfEvent $event)
{
$event->getSubject()->setPanel('assets', new sfWebDebugPanelAssets($event->getSubject()));
}
}
この方法によって、開発者からの変更を行わずにパネルがウェブデバッグツールバーに追加されます。
作業はこれでお終いです。新しいweb.debug.load_panelsイベントのおかげで、望む方法でウェブデバッグツールバーを自由にカスタマイズできます。詳しい情報を知りたいもしくは詳しい仕組みを学びたいのであれば、組み込みのパネルに関するコードを閲覧できます。
Documentation
| That's all there is ... | |
| brtRiver(2008-12-29 12:51:09) | |
| That way, your panel will ... | |
| brtRiver(2008-12-29 12:50:56) | |
| [php] class sfWeb ... | |
| brtRiver(2008-12-29 12:50:42) | |
| Then, add the `listenToAd ... | |
| brtRiver(2008-12-29 12:50:28) | |
| [php] <?php ... | |
| brtRiver(2008-12-29 12:50:20) | |
| When a user install your ... | |
| brtRiver(2008-12-29 12:50:08) | |
| You can even package your ... | |
| brtRiver(2008-12-29 12:49:58) | |
| Package your panels as a ... | |
| brtRiver(2008-12-29 12:49:50) | |
| ![The customized web debu ... | |
| brtRiver(2008-12-29 12:49:38) | |
| Here is the result on a s ... | |
| brtRiver(2008-12-29 12:49:30) | |
| [php] <?php ... | |
| brtRiver(2008-12-29 12:49:21) | |
| The `getPanelContent()` m ... | |
| brtRiver(2008-12-29 12:49:05) | |
| Let's make it a bit ... | |
| brtRiver(2008-12-29 12:48:53) | |
| It will display a new ... | |
| brtRiver(2008-12-29 12:48:44) | |
| [php] <?php ... | |
| brtRiver(2008-12-29 12:48:36) | |
| With this information in ... | |
| brtRiver(2008-12-29 12:48:24) | |
| * `getTitle()`: ... | |
| brtRiver(2008-12-29 12:48:15) | |
| We need to create the `sf ... | |
| brtRiver(2008-12-29 12:48:04) | |
| [php] <?php ... | |
| brtRiver(2008-12-29 12:47:53) | |
| You can of course extends ... | |
| brtRiver(2008-12-29 12:47:38) |