本記事では、以下画像のように変数の中身をWebで表示させる方法について紹介します。
カスタマイズされる方には必須とも言え、頻繁に利用する機能かと思います。
対象ページのTwigテンプレートに、変数を表示させるdump()関数を記述するだけでOK。(上記画像では、ProductControllerから渡された変数「Product」の中身を表示しています。)
Twigファイルだけでなく、Controllerで設定した変数の中身を表示させることもできます。(上記画像では、ProductController内のdetail関数で定義した「$Product」の中身を表示しています。)
まずデバッグモードを設定する
変数の中身を表示させるには「デバッグモード」を設定しておく必要があります。
設定していないとエラーになるので、ファイルサーバーの「.env」ファイルを修正しておきましょう。
詳しい設定方法については以下記事を参考にしてください。
Twigテンプレート内の変数を表示する
Twigテンプレートに設定された変数を表示するには「dump()」関数を使います。
()内には表示させたい変数を記述します。
例)商品詳細ページの変数を表示
冒頭の画像のように、商品詳細ページにおいて商品情報が格納されている変数「Product」の中身を表示するには、detail.twigの{% block main %} 〜 {% endblock %}内に以下コードを記述します。
{{ dump(Product) }}
コードを記述する場所によって、表示される位置が変わります。
冒頭の画像では、{% block main %}のすぐ下に記述しています。
引数には好きな変数を指定でき(テンプレート内で設定されている変数に限る)、例えばタグ情報を取得したいなら以下のように記述します。
{{ dump(Product.Tags) }}
- 対象のTwigテンプレートに存在しない変数を渡してしまうとエラーになります。
- 前項の通り「dump()」はデバッグモードのときにしか使えません。
本番モードではエラーになってしまうので、ご注意ください。
Controller内の変数を表示する
先程の処理では、Twigテンプレートに渡した時点(つまり、ControllerからTwigテンプレートに渡した時点)の変数を確認することはできますが、ControllerからTwigテンプレートに渡す前(つまり、Controller内で処理中)の変数については確認できません。
Controller内の変数を確認するには、変数を確認したいタイミングで「dump()」関数と「die()」もしくは「exit()」関数の2つを連続して記述します。
- 「dump()」関数は引数に渡した変数の中身を表示します。(冒頭の画像のように)
- 「die()」関数 および 「exit()」関数は、スクリプトを強制終了する関数です。
- この関数以降のプログラムは処理されない、ということです。
例)商品詳細ページの変数を表示
「src/Eccube/Controller」下にある「ProductController.php」に、商品詳細画面を表示するための関数(detail)があります。この関数内で「dump($Product)」と「die()」または「exit()」を記述すると、これらのコードを記述した時点での$Productの中身を商品詳細ページにて確認できます。
dump($Product);
die();
冒頭の画像では、return処理の前に上記コードを記述しています。
このコードを書く場所を変えれば、Controllerで処理途中の変数も確認できるため、デバッグにはぜひ使いたい機能ですね。
- 「die()」「exit()」のどちらも記述しないと、そのままControllerの処理が進んでしまい通常の商品ページが表示されます。(変数の中身は表示されません。)
- Controllerファイルに上記コードを書く際は、誤って他のコードを消してしまったり不要な文字・数字を書いてしまったりしないよう注意しましょう。
まとめ
以上、EC-CUBEのデバッグで必須ともいえる関数「dump()」について紹介しました。
ページ管理のTwigテンプレートを見ればわかるとおり、EC-CUBEではデフォルトで多くの変数が使われており、初見だと何が何やらわからないという状態になりがちです。
「dump()」を使って変数を可視化できると、デバッグはもちろんシステムの理解にも繋がるので、ぜひ使ってみてください!