The VarDumper Component

The VarDumper component provides mechanisms for extracting the state out of any PHP variables. Built on top, it provides a better dump() function that you can use instead of var_dump.

VarDumper コンポーネントは、PHP 変数から状態を抽出するメカニズムを提供します。上に構築され、var_dump の代わりに使用できるより優れた dump() 関数を提供します。

Installation

1
$ composer require --dev symfony/var-dumper

Note

ノート

If you install this component outside of a Symfony application, you must require the vendor/autoload.php file in your code to enable the class autoloading mechanism provided by Composer. Read this article for more details.

このコンポーネントを Symfony アプリケーションの外部にインストールする場合は、Composer が提供するクラス自動ロード メカニズムを有効にするために、コード内に vendor/autoload.php ファイルを必要とする必要があります。詳細については、この記事をお読みください。

Note

ノート

If using it inside a Symfony application, make sure that the DebugBundle has been installed (or run composer require --dev symfony/debug-bundle to install it).

Symfony アプリケーション内で使用する場合は、DebugBundle がインストールされていることを確認してください (または composer require --dev symfony/debug-bundle を実行してインストールしてください)。

The dump() Function

The VarDumper component creates a global dump() function that you can use instead of e.g. var_dump. By using it, you'll gain:

VarDumper コンポーネントは、グローバルな dump() 関数を作成します。 var_dump.それを使用すると、次のことが得られます。
  • Per object and resource types specialized view to e.g. filter out Doctrine internals while dumping a single proxy entity, or get more insight on opened files with stream_get_meta_data;
    オブジェクトとリソースの種類ごとに特化したビューなど。単一のプロキシ エンティティをダンプする際に Doctrine の内部を除外するか、stream_get_meta_data で開いているファイルについてより多くの洞察を得ます。
  • Configurable output formats: HTML or colored command line output;
    構成可能な出力形式: HTML または色付きのコマンド ライン出力。
  • Ability to dump internal references, either soft ones (objects or resources) or hard ones (=& on arrays or objects properties). Repeated occurrences of the same object/array/resource won't appear again and again anymore. Moreover, you'll be able to inspect the reference structure of your data;
  • Ability to operate in the context of an output buffering handler.
    出力バッファリング ハンドラのコンテキストで操作する機能。

For example:

例えば:
1
2
3
4
5
6
7
8
9
require __DIR__.'/vendor/autoload.php';

// create a variable, which could be anything!
$someVar = ...;

dump($someVar);

// dump() returns the passed value, so you can dump an object and keep using it
dump($someObject)->someMethod();

By default, the output format and destination are selected based on your current PHP SAPI:

デフォルトでは、出力形式と出力先は現在の PHP SAPI に基づいて選択されます。
  • On the command line (CLI SAPI), the output is written on STDOUT. This can be surprising to some because this bypasses PHP's output buffering mechanism;
    コマンドライン (CLI SAPI) では、出力は STDOUT に書き込まれます。これは、PHP の出力バッファリング メカニズムをバイパスするため、驚く人もいます。
  • On other SAPIs, dumps are written as HTML in the regular output.
    他の SAPI では、ダンプは通常の出力で HTML として書き込まれます。

Tip

ヒント

You can also select the output format explicitly defining the VAR_DUMPER_FORMAT environment variable and setting its value to either html, cli or server.

VAR_DUMPER_FORMAT 環境変数を明示的に定義し、その値を html、cli、または server に設定して、出力形式を選択することもできます。

Note

ノート

If you want to catch the dump output as a string, please read the advanced documentation which contains examples of it. You'll also learn how to change the format or redirect the output to wherever you want.

ダンプ出力を文字列として取得したい場合は、その例を含む高度なドキュメントを読んでください。また、フォーマットを変更したり、出力を必要な場所にリダイレクトしたりする方法も学びます。

Tip

ヒント

In order to have the dump() function always available when running any PHP code, you can install it globally on your computer:

PHP コードを実行しているときに常に dump() 関数を使用できるようにするには、コンピューターにグローバルにインストールします。
  1. Run composer global require symfony/var-dumper;
    composer global require symfony/var-dumper; を実行します。
  2. Add auto_prepend_file = ${HOME}/.composer/vendor/autoload.php to your php.ini file;
    auto_prepend_file = ${HOME}/.composer/vendor/autoload.php を php.ini ファイルに追加します。
  3. From time to time, run composer global update symfony/var-dumper to have the latest bug fixes.
    時々、composer global update symfony/var-dumper を実行して、最新のバグ修正を入手してください。

Tip

ヒント

The VarDumper component also provides a dd() ("dump and die") helper function. This function dumps the variables using dump() and immediately ends the execution of the script (using exit).

VarDumper コンポーネントは、dd() (「ダンプして死ぬ」) ヘルパー関数も提供します。この関数は、dump() を使用して変数をダンプし、すぐにスクリプトの実行を終了します (exit を使用)。

The Dump Server

The dump() function outputs its contents in the same browser window or console terminal as your own application. Sometimes mixing the real output with the debug output can be confusing. That's why this component provides a server to collect all the dumped data.

dump() 関数は、独自のアプリケーションと同じブラウザ ウィンドウまたはコンソール ターミナルにその内容を出力します。実際の出力とデバッグ出力を混在させると、混乱することがあります。そのため、このコンポーネントは、ダンプされたすべてのデータを収集するサーバーを提供します。

Start the server with the server:dump command and whenever you call to dump(), the dumped data won't be displayed in the output but sent to that server, which outputs it to its own console or to an HTML file:

server:dump コマンドでサーバーを起動すると、todump() を呼び出すたびに、ダンプされたデータは出力に表示されず、そのサーバーに送信され、独自のコンソールまたは HTML ファイルに出力されます。
1
2
3
4
5
6
# displays the dumped data in the console:
$ php bin/console server:dump
  [OK] Server listening on tcp://0.0.0.0:9912

# stores the dumped data in a file using the HTML format:
$ php bin/console server:dump --format=html > dump.html

Inside a Symfony application, the output of the dump server is configured with the dump_destination option of the debug package:

Symfony アプリケーション内では、ダンプ サーバーの出力はデバッグ パッケージの dump_destination オプションで設定されます。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
# config/packages/debug.yaml
debug:
   dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"

Outside a Symfony application, use the ServerDumper class:

Symfony アプリケーションの外では、ServerDumper クラスを使用します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
require __DIR__.'/vendor/autoload.php';

use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Symfony\Component\VarDumper\Dumper\ContextProvider\CliContextProvider;
use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider;
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
use Symfony\Component\VarDumper\Dumper\ServerDumper;
use Symfony\Component\VarDumper\VarDumper;

$cloner = new VarCloner();
$fallbackDumper = \in_array(\PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper() : new HtmlDumper();
$dumper = new ServerDumper('tcp://127.0.0.1:9912', $fallbackDumper, [
    'cli' => new CliContextProvider(),
    'source' => new SourceContextProvider(),
]);

VarDumper::setHandler(function ($var) use ($cloner, $dumper) {
    $dumper->dump($cloner->cloneVar($var));
});

Note

ノート

The second argument of ServerDumper is a DataDumperInterface instance used as a fallback when the server is unreachable. The third argument are the context providers, which allow to gather some info about the context in which the data was dumped. The built-in context providers are: cli, request and source.

ServerDumper の 2 番目の引数は、サーバーに到達できない場合にフォールバックとして使用される DataDumperInterface インスタンスです。 3 番目の引数は、データがダンプされたコンテキストに関する情報を収集できるようにするコンテキスト プロバイダーです。組み込みのコンテキスト プロバイダーは、cli、request、および source です。

Then you can use the following command to start a server out-of-the-box:

次に、次のコマンドを使用して、サーバーをすぐに起動できます。
1
2
$ ./vendor/bin/var-dump-server
  [OK] Server listening on tcp://127.0.0.1:9912

Configuring the Dump Server with Environment Variables

If you prefer to not modify the application configuration (e.g. to quickly debug a project given to you) use the VAR_DUMPER_FORMAT env var.

アプリケーション構成を変更したくない場合 (たとえば、指定されたプロジェクトをすばやくデバッグする場合)、VAR_DUMPER_FORMAT 環境変数を使用します。

First, start the server as usual:

まず、通常どおりサーバーを起動します。
1
$ ./vendor/bin/var-dump-server

Then, run your code with the VAR_DUMPER_FORMAT=server env var by configuring this value in the .env file of your application. For console commands, you can also define this env var as follows:

次に、アプリケーションの .env ファイルでこの値を構成することにより、VAR_DUMPER_FORMAT=server env var を使用してコードを実行します。コンソール コマンドの場合、この環境変数を次のように定義することもできます。
1
$ VAR_DUMPER_FORMAT=server [your-cli-command]

Note

ノート

The host used by the server format is the one configured in the VAR_DUMPER_SERVER env var or 127.0.0.1:9912 if none is defined. If you prefer, you can also configure the host in the VAR_DUMPER_FORMAT env var like this: VAR_DUMPER_FORMAT=tcp://127.0.0.1:1234.

サーバー形式で使用されるホストは、VAR_DUMPER_SERVER 環境変数で構成されたホスト、または何も定義されていない場合は 127.0.0.1:9912 です。必要に応じて、次のように VAR_DUMPER_FORMATenv 変数でホストを構成することもできます: VAR_DUMPER_FORMAT=tcp://127.0 .0.1:1234。

DebugBundle and Twig Integration

The DebugBundle allows greater integration of this component into Symfony applications.

DebugBundle を使用すると、このコンポーネントを Symfony アプリケーションにさらに統合できます。

Since generating (even debug) output in the controller or in the model of your application may just break it by e.g. sending HTTP headers or corrupting your view, the bundle configures the dump() function so that variables are dumped in the web debug toolbar.

コントローラーまたはアプリケーションのモデルで(デバッグでも)出力を生成すると、たとえば次のように壊れる可能性があります。 HTTP ヘッダーを送信したり、ビューを破損したりすると、バンドルは変数が Web デバッグ ツールバーにダンプされるように dump() 関数を構成します。

But if the toolbar cannot be displayed because you e.g. called die()/exit()/dd() or a fatal error occurred, then dumps are written on the regular output.

ただし、ツールバーを表示できない場合は、たとえば、 die()/exit()/dd() が呼び出されるか、致命的なエラーが発生すると、通常の出力にダンプが書き込まれます。

In a Twig template, two constructs are available for dumping a variable. Choosing between both is mostly a matter of personal taste, still:

Twig テンプレートでは、変数をダンプするために 2 つのコンストラクトを使用できます。どちらを選択するかは、ほとんどが個人的な好みの問題ですが、それでも次のようになります。
  • {% dump foo.bar %} is the way to go when the original template output shall not be modified: variables are not dumped inline, but in the web debug toolbar;
    {% dump foo.bar %} は、元のテンプレート出力が変更されない場合の方法です。変数はインラインではなく、webdebug ツールバーにダンプされます。
  • on the contrary, {{ dump(foo.bar) }} dumps inline and thus may or not be suited to your use case (e.g. you shouldn't use it in an HTML attribute or a <script> tag).
    逆に、 {{ dump(foo.bar) }} はインラインでダンプするため、ユースケースに適している場合と適していない場合があります (たとえば、HTML 属性または atag では使用しないでください)。

This behavior can be changed by configuring the debug.dump_destination option. Read more about this and other options in the DebugBundle configuration reference.

この動作は、debug.dump_destination オプションを構成することで変更できます。このオプションおよびその他のオプションについて詳しくは、DebugBundle 構成リファレンスを参照してください。

Tip

ヒント

If the dumped contents are complex, consider using the local search box to look for specific variables or values. First, click anywhere on the dumped contents and then press Ctrl. + F or Cmd. + F to make the local search box appear. All the common shortcuts to navigate the search results are supported (Ctrl. + G or Cmd. + G, F3, etc.) When finished, press Esc. to hide the box again.

ダンプされた内容が複雑な場合は、ローカル検索ボックスを使用して特定の変数または値を探すことを検討してください。まず、ダンプされたコンテンツの任意の場所をクリックしてから、Ctrl キーを押します。 + F または Cmd. + F でローカル検索ボックスを表示します。検索結果をナビゲートするためのすべての一般的なショートカットがサポートされています (Ctrl + G または Cmd + G、F3 など)。終了したら、Esc を押します。ボックスを再び非表示にします。

If you want to use your browser search input, press Ctrl. + F or Cmd. + F again while focusing on VarDumper's search input.

ブラウザの検索入力を使用する場合は、Ctrl キーを押します。 + F orCmd. + F VarDumper の検索入力にフォーカスしながら、もう一度。

Using the VarDumper Component in your PHPUnit Test Suite

The VarDumper component provides a trait that can help writing some of your tests for PHPUnit.

VarDumper コンポーネントは、PHPUnit のテストを作成するのに役立つ特性を提供します。

This will provide you with two new assertions:

これにより、2 つの新しいアサーションが提供されます。
assertDumpEquals()
verifies that the dump of the variable given as the second argument matches the expected dump provided as the first argument.
2 番目の引数として指定された変数のダンプが、最初の引数として指定された予想されるダンプと一致することを確認します。
assertDumpMatchesFormat()
is like the previous method but accepts placeholders in the expected dump, based on the assertStringMatchesFormat() method provided by PHPUnit.
前のメソッドと似ていますが、PHPUnit が提供する assertStringMatchesFormat() メソッドに基づいて、予想されるダンプでプレースホルダーを受け入れます。

The VarDumperTestTrait also includes these other methods:

VarDumperTestTrait には、次の他のメソッドも含まれます。
setUpVarDumper()
is used to configure the available casters and their options, which is a way to only control the fields you're expecting and allows writing concise tests.
利用可能なキャスターとそのオプションを構成するために使用されます。これは、期待するフィールドのみを制御し、簡潔なテストを作成できるようにする方法です。
tearDownVarDumper()
is called automatically after each case to reset the custom configuration made in setUpVarDumper().
setUpVarDumper() で作成されたカスタム構成をリセットするために、各ケースの後に自動的に呼び出されます。

Example:

例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use PHPUnit\Framework\TestCase;
use Symfony\Component\VarDumper\Test\VarDumperTestTrait;

class ExampleTest extends TestCase
{
    use VarDumperTestTrait;

    protected function setUp()
    {
        $casters = [
            \DateTimeInterface::class => static function (\DateTimeInterface $date, array $a, Stub $stub): array {
                $stub->class = 'DateTime';
                return ['date' => $date->format('d/m/Y')];
            },
        ];

        $flags = CliDumper::DUMP_LIGHT_ARRAY | CliDumper::DUMP_COMMA_SEPARATOR;

        // this configures the casters & flags to use for all the tests in this class.
        // If you need custom configurations per test rather than for the whole class,
        // call this setUpVarDumper() method from those tests instead.
        $this->setUpVarDumper($casters, $flags);
    }

    public function testWithDumpEquals()
    {
        $testedVar = [123, 'foo'];

        // the expected dump contents don't have the default VarDumper structure
        // because of the custom casters and flags used in the test
        $expectedDump = <<<EOTXT
[
  123,
  "foo",
]
EOTXT;

        // if the first argument is a string, it must be the whole expected dump
        $this->assertDumpEquals($expectedDump, $testedVar);

        // if the first argument is not a string, assertDumpEquals() dumps it
        // and compares it with the dump of the second argument
        $this->assertDumpEquals($testedVar, $testedVar);
    }
}

Dump Examples and Output

For simple variables, reading the output should be straightforward. Here are some examples showing first a variable defined in PHP, then its dump representation:

単純な変数の場合、出力の読み取りは簡単です。次に、最初に PHP で定義された変数を示し、次にそのダンプ表現を示すいくつかの例を示します。
1
2
3
4
5
6
7
8
$var = [
    'a simple string' => "in an array of 5 elements",
    'a float' => 1.0,
    'an integer' => 1,
    'a boolean' => true,
    'an empty array' => [],
];
dump($var);

Note

ノート

The gray arrow is a toggle button for hiding/showing children of nested structures.

灰色の矢印は、ネストされた構造の子を非表示/表示するためのトグル ボタンです。
1
2
3
4
5
6
7
$var = "This is a multi-line string.\n";
$var .= "Hovering a string shows its length.\n";
$var .= "The length of UTF-8 strings is counted in terms of UTF-8 characters.\n";
$var .= "Non-UTF-8 strings length are counted in octet size.\n";
$var .= "Because of this `\xE9` octet (\\xE9),\n";
$var .= "this string is not UTF-8 valid, thus the `b` prefix.\n";
dump($var);
1
2
3
4
5
6
7
8
9
class PropertyExample
{
    public $publicProperty = 'The `+` prefix denotes public properties,';
    protected $protectedProperty = '`#` protected ones and `-` private ones.';
    private $privateProperty = 'Hovering a property shows a reminder.';
}

$var = new PropertyExample();
dump($var);

Note

ノート

`#14` is the internal object handle. It allows comparing two consecutive dumps of the same object.

`#14` は内部オブジェクト ハンドルです。同じオブジェクトの 2 つの連続したダンプを比較できます。
1
2
3
4
5
6
7
8
class DynamicPropertyExample
{
    public $declaredProperty = 'This property is declared in the class definition';
}

$var = new DynamicPropertyExample();
$var->undeclaredProperty = 'Runtime added dynamic properties have `"` around their name.';
dump($var);
1
2
3
4
5
6
7
class ReferenceExample
{
    public $info = "Circular and sibling references are displayed as `#number`.\nHovering them highlights all instances in the same dump.\n";
}
$var = new ReferenceExample();
$var->aCircularReference = $var;
dump($var);
1
2
3
4
5
6
7
8
$var = new \ErrorException(
    "For some objects, properties have special values\n"
    ."that are best represented as constants, like\n"
    ."`severity` below. Hovering displays the value (`2`).\n",
    0,
    E_WARNING
);
dump($var);
1
2
3
4
5
6
7
8
$var = [];
$var[0] = 1;
$var[1] =& $var[0];
$var[1] += 1;
$var[2] = ["Hard references (circular or sibling)"];
$var[3] =& $var[2];
$var[3][] = "are dumped using `&number` prefixes.";
dump($var);
1
2
3
4
5
$var = new \ArrayObject();
$var[] = "Some resources and special objects like the current";
$var[] = "one are sometimes best represented using virtual";
$var[] = "properties that describe their internal state.";
dump($var);
1
2
3
4
5
6
7
8
$var = new AcmeController(
    "When a dump goes over its maximum items limit,\n"
    ."or when some special objects are encountered,\n"
    ."children can be replaced by an ellipsis and\n"
    ."optionally followed by a number that says how\n"
    ."many have been removed; `9` in this case.\n"
);
dump($var);

Learn More