EC-CUBE 4のカスタマイズ中に「この変数、いま何が入っているんだろう」と思ったときに使うのが dump() 関数です。Twigテンプレート側とController側で書き方が違うので、両方まとめました。
Twigテンプレートなら {{ dump(変数) }}、Controller内なら dd($変数) と書きます。どちらもデバッグモード(APP_ENV=dev)でのみ動作します。
{{ dump(Product) }}
dd($Product);
Controller側で dump() だけを書くと処理がそのまま先へ進んでしまうため、表示を確認したいなら dd()(または dump() と die() の併用)を使います。
カスタマイズをされる方には必須とも言え、頻繁に利用する機能かと思います。
商品詳細ページに、変数「Product」の内容を表示させる
対象ページのTwigテンプレートにdump() を書くだけでOK
Controllerファイルで設定した変数の中身を表示させる
ProductController内のdetail関数で定義した$Product の中身
【動作環境】EC-CUBEのバージョン:4.3.0 / サーバー:XServer
dump()の書き方 早見表
使う場所によって書き方が変わります。表の右上のボタンで表全体をコピーできます。
| やりたいこと | 書き方 | 書く場所 |
|---|---|---|
| Twigに渡された変数を見る | {{ dump(Product) }} | Twigテンプレート |
| 特定のプロパティだけ見る | {{ dump(Product.Tags) }} | Twigテンプレート |
| 変数が無いときに落とさない | {{ dump(Product.Tags|default(‘データなし’)) }} | Twigテンプレート |
| Controller内の変数を見る | dump($Product); die(); | Controller |
| 同上(短く書く) | dd($Product); | Controller |
| 渡される直前の値を見る | returnの直前に dd() を置く | Controller |
まずデバッグモードを設定する
変数の中身を表示させるには「デバッグモード」を設定しておく必要があります。設定していないとエラーになるので、ファイルサーバーの .env ファイルを修正しておきましょう。
APP_ENV=dev
APP_DEBUG=1
詳しい設定方法については以下の記事を参考にしてください。
デバッグモードの設定/解除方法Twigテンプレート内の変数を表示する(dump()関数)
EC-CUBE 4では、コントローラー からTwigテンプレートへ 変数 を渡すことができます。デバッグ時に渡された変数の中身を確認したい場合は、Twigの dump() 関数を使用します。
例)商品詳細ページの変数を表示する
商品詳細ページ(detail.twig)において、商品情報が格納されている Product の内容を表示するには、{% block main %} 〜 {% endblock %} 内に以下のコードを記述します。
{{ dump(Product) }}
このコードを記述する場所によって、表示される位置が変わります。たとえば {% block main %} の直後に記述すると、ページのメイン部分の上部にデバッグ情報が表示されます。
また、特定のプロパティのみを表示することもできます。たとえば商品情報に紐づいているタグ情報を表示したい場合は以下のように記述します。
{{ dump(Product.Tags) }}
{% block %} というTwig特有の記法については Twig まとめ(1) にまとめています。
dump() が動作する条件
dump() はデバッグモード(APP_ENV=dev)でのみ動作します。本番環境(APP_ENV=prod)では dump() を使用するとエラーになるため、必ず開発環境でのみ利用してください。
変数が存在しない場合の挙動
dump() で指定した変数がTwigテンプレート内に存在しない場合、エラーになることがあります。
ただし、変数が null の場合はエラーにならず、null や [] として出力されます。変数が存在するか事前にチェックする場合は、default() フィルタを使う方法もあります。
{{ dump(Product.Tags|default('データなし')) }}
Controller内の変数を表示する(dump()関数とdie()またはexit()関数)
先ほどの処理では、Twigテンプレートに渡した時点の変数を確認することはできますが、ControllerからTwigテンプレートへ渡す前、つまりController内で処理している最中の変数については確認できません。
Controller内の変数をデバッグするには、dump() 関数に加えて die()(または exit())関数を組み合わせて使用します。
dump()関数は引数に渡した変数の中身を表示しますdie()およびexit()は、スクリプトを強制終了する関数です。この関数以降のプログラムは処理されません
例)商品詳細ページの変数を表示
商品詳細ページを表示するためのController ProductController.php(src/Eccube/Controller 内)で、detail() メソッド内に dump() を追加することで、$Product の中身を確認できます。
Controller内で変数の内容を出力するには、確認したいタイミングで以下のコードを記述します。
dump($Product);
die();
dump($Product) の後に die(); を記述することで、$Product の中身が画面に表示され、その後の処理(Twigのレンダリングなど)は実行されません。
または、Symfonyでは dump() に die() を組み合わせた dd()(dump and die)関数を使用することもできます。
dd($Product);
dd() は dump() の内容を表示した後、自動的にスクリプトを停止するため、より簡潔なコードになります。
dump() の記述場所による違い
| 書く場所 | 確認できること |
|---|---|
| returnの前 | Twigへ渡す直前の変数の状態 |
| DBから取得した直後 | 取得したデータが正しいかどうか |
| 値をセットした直後 | 処理の途中でデータがどう変わったか |
このように dump() を書く場所を変えることで、Controllerのどの時点で変数がどのような値を持っているのかを確認できます。
die() や exit() を使う理由
dump() だけでは、変数の中身が表示された後もControllerの処理が継続してしまい、最終的には通常どおりTwigがレンダリングされてしまいます。そのため、デバッグのためにスクリプトの実行を強制終了する die() や exit() が必要です。
使用時の注意点
- 開発環境でのみ使用する:
dump()やdd()はデバッグ専用の関数です。本番環境で使用するとページが意図せず停止してしまうため、必ず開発環境(APP_ENV=dev)でのみ使用しましょう - 不要になったら削除する:デバッグが完了したら、必ず
dump()/dd()/die()/exit()を削除してください。そのままではページが正常に表示されなくなります
まとめ
EC-CUBEの デバッグ で必須ともいえる関数 dump() について紹介しました。変数を可視化できると、デバッグはもちろんシステムの理解にも繋がるので、ぜひ使ってみてください。
Twigテンプレート内の変数を表示する方法
dump()を使うと、Twigテンプレート内の変数を確認できる- デバッグモード(
APP_ENV=dev)でのみ動作し、本番環境ではエラーになる - 変数が存在しないとエラーになる場合があるが、
default()を使うことで回避できる
Controller内の変数を表示する方法
- Controller内の変数を確認するには
dump()+die()(またはexit())を使う - より簡潔にするなら
dd()(dump and die)を使う - デバッグのタイミングによって
dump()の記述場所を変えると便利 - 本番環境では使用しないよう注意する

