TRAJOIN is an Application to Translate symfony documents Jointly.

home > 1.2/cookbook/en > web_debug_toolbar.txt

[1] Edit ↑TOP

ウェブデバッグツールバーをカスタマイズする方法


[2] Edit ↑TOP

symfonyのウェブデバッグツールバーは開発者のベストフレンドの1つです。開発環境で使うとき常にブラウザで手軽にアクセスできます。これは現在のページに関して知る必要があるすべての情報をあなたに伝えアプリケーションのデバッギングを楽にします。そして最高のニュースウェブデバッグツールバーは完全に思い通りに設定できることです。


[3] Edit ↑TOP

ウェブデバッグツールバー


[4] Edit ↑TOP

設定無しでは、デフォルトのツールバーの外見は次の通りです:


[5] Edit ↑TOP

デフォルトのウェブデバッグツールバー


[6] Edit ↑TOP

ツールバーはパネルで構成されます。それぞれのパネルはタイトルとオプションのパネルの内容で構成され、パネルはPHPのオブジェクトで表現されます。デフォルトでは、7つのパネルが存在します:


[7] Edit ↑TOP
名前 クラスの名前 説明
symfony version sfWebDebugPanelSymfonyVersion symfonyのバージョン
cache information sfWebDebugPanelCache キャッシュ
configuration sfWebDebugPanelConfig 設定
logs sfWebDebugPanelLogs ログ
database information sfWebDebugPanelDatabase データベース
memory usage sfWebDebugPanelMemory メモリー
timer sfWebDebugPanelTimer タイマー

[8] Edit ↑TOP

ツールバーをカスタマイズする


[9] Edit ↑TOP

アプリケーションもしくはプロジェクトの設定ファイルの中でdebug.web.load_panelsイベントをリスニングすることでウェブデバッグツールバーをカスタマイズできます。次のコードはフロントエンドの設定クラスの中でこのイベントをリスニングする方法を示しています:


[10] Edit ↑TOP

<?php

class frontendConfiguration extends sfApplicationConfiguration
{
  public function configure()
  {
    // ...

    $this->dispatcher->connect('debug.web.load_panels', array($this, 'configureWebDebugToolbar'));
  }
}

[11] Edit ↑TOP

この設定を適切に行うことで、symfonyはウェブデバッグツールバーを初期化するときに自動的にconfigureWebDebugToolbar()メソッドを呼び出します。このメソッドはパネルを削除、置き換えもしくは追加できます。


[12] Edit ↑TOP

すべてのリスナーに関しては、symfonyはイベントを引数としてconfigureWebDebugToolbar()メソッドを呼び出します。イベントの題目は操作したいウェブデバッグツールバーのオブジェクトです:


[13] Edit ↑TOP

<?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();
  }
}

[14] Edit ↑TOP

パネルを削除する


[15] Edit ↑TOP

パネルを削除するためには、次のようにパネルの名前でremovePanel()メソッドを呼び出します:


[16] Edit ↑TOP

<?php

class frontendConfiguration extends sfApplicationConfiguration
{
  // ...

  public function configureWebDebugToolbar(sfEvent $event)
  {
    $webDebugToolbar = $event->getSubject();

    $webDebugToolbar->removePanel('memory');
  }
}

[17] Edit ↑TOP

パネルを置き換えるもしくは追加する


[18] Edit ↑TOP

パネルを置き換えるためには、既存の名前でsetPanel()メソッドを呼び出します。


[19] Edit ↑TOP

パネルを作るためには、同じsetPanel()メソッドを呼び出しますがユニークな新しい名前を渡します。


[20] Edit ↑TOP

もちろん、同じ情報を追加もしくは削除するために既存のパネルを拡張することができます。説明のために、リスポンスオブジェクトの範囲内に登録されたJavaScriptとスタイルシートのファイルを表示する真新しいパネルを作ってみましょう:


[21] Edit ↑TOP

<?php

class frontendConfiguration extends sfApplicationConfiguration
{
  // ...

  public function configureWebDebugToolbar(sfEvent $event)
  {
    $webDebugToolbar = $event->getSubject();

    $webDebugToolbar->setPanel('assets', new sfWebDebugPanelAssets($webDebugToolbar));
  }
}

[22] Edit ↑TOP

sfWebDebugPanelAssetsクラスを作る必要があります。すべてのパネルクラスはsfWebDebugPanelを拡張しなければならず少なくとも3つの抽象メソッドを実装する必要があります:


[23] Edit ↑TOP
  • getTitle(): ウェブデバッグツールバーに表示されるHTMLを返します。これがnullを返すとき、パネルは表示されません。
  • getPanelContent(): パネルのHTML表現を返します。これがnullを返すとき、タイトルはクリックできません。
  • getPanelTitle(): 表示されるときにパネルのタイトルを返します。

[24] Edit ↑TOP

この情報を頭の中に入れた上で、下記のコードによって最少のパネルがおそらく動作するはずです:


[25] Edit ↑TOP

<?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;
  }
}

[26] Edit ↑TOP

これはウェブデバッグツールバーの中で新しい'assets'のエントリを表示しますが、パネルの内容は空なのでテキストをクリックすることはできません。


[27] Edit ↑TOP

内容をパネルに追加して少し面白いものにしてみましょう。レスポンスオブジェクトは2つのメソッド、getJavascripts()getStylesheets()を持ち、3つのメソッドはレスポンスオブジェクトによって含まれるJavaScriptとスタイルシートのファイルの配列を返します。


[28] Edit ↑TOP

getPanelContent()メソッドはパネルの内容をコンストラクトするためにこれらの2つの配列をイテレートしてこれをHTMLの文字列として返します:


[29] Edit ↑TOP

<?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;
  }
}

[30] Edit ↑TOP

symfonyのページの結果は次の通りです:


[31] Edit ↑TOP

カスタマイズされたウェブデバッグツールバー


[32] Edit ↑TOP

独自のパネルをプラグインとしてパッケージにする


[33] Edit ↑TOP

新しいパネルをパッケージしてsymfonyのプラグインとして配布することもできます。


[34] Edit ↑TOP

ユーザーがプラグインをインストールするとき、以前我々が行ったようにイベントリスナーを追加するために設定クラスを変更してよいか問い合わせることができますが、次のようにプラグインのconfig.phoファイルの中でweb.debug.load_panelsイベントに接続することもできます:


[35] Edit ↑TOP

<?php

// ...

require_once '/path/to/sfWebDebugPanelAssets';

$this->dispatcher->connect('debug.web.load_panels', array('sfWebDebugPanelAssets', 'listenToAddPanelEvent'));

[36] Edit ↑TOP

それから、listenToAddPanelEvent()メソッドをsfWebDebugPanelAssetsクラスに追加します:


[37] Edit ↑TOP

class sfWebDebugPanelAssets extends sfWebDebugPanel
{
  static public function listenToAddPanelEvent(sfEvent $event)
  {
    $event->getSubject()->setPanel('assets', new sfWebDebugPanelAssets($event->getSubject()));
  }
}

[38] Edit ↑TOP

この方法によって、開発者からの変更を行わずにパネルがウェブデバッグツールバーに追加されます。


[39] Edit ↑TOP

作業はこれでお終いです。新しいweb.debug.load_panelsイベントのおかげで、望む方法でウェブデバッグツールバーを自由にカスタマイズできます。詳しい情報を知りたいもしくは詳しい仕組みを学びたいのであれば、組み込みのパネルに関するコードを閲覧できます。


Comments

Menu

Documentation



Latest Histories

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)

Untranslated