LoginSignup
1
0

More than 5 years have passed since last update.

Symfony2の本番環境のTwig内で変数の中身を綺麗に表示(pretty print)したい

Last updated at Posted at 2015-12-19

Why

結論

  • 設定次第では本番環境でもdumpを有効にできるが、デバッグ目的の趣が強いのであまりおすすめできない気がする
  • 代わりにjson_encodeJSON_PRETTY_PRINTJSON_UNESCAPED_UNICODEオプション付きで使えばわりと綺麗に表示できる
  • bootstrap3を使うなら下記のイメージ
<pre><code>
    {{- var|json_encode(constant('JSON_PRETTY_PRINT') b-or constant('JSON_UNESCAPED_UNICODE')) -}}
</code></pre>

検証その1

  • 下記のようなコントローラーとテンプレートを用意し、開発環境と本番環境での表示を確認する
  • Symfony2のバージョンは
$ ./app/console --version
Symfony version 2.7.7 - app/dev/debug

コントローラー

<?php
// (namespace など省略)
class PrettyPrintController extends Controller
{
    /**
     * @Route("/")
     * @Template
     */
    public function indexAction()
    {
        return [
            'var' => [
                0,
                '1',
                true,
                null,
                [
                    'key' => 'value',
                ],
            ],
        ];
    }
}

テンプレート(Twig)

{% extends 'base.html.twig' %}

{% block stylesheets %}
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
{% endblock %}

{% block body %}
  <div class="container">
    <h2>dump</h2>
    <div>
      {{ dump(var) }}
    </div>

    <h2>json_encode</h2>
    <pre><code>
    {{- var|json_encode(constant('JSON_PRETTY_PRINT') b-or constant('JSON_UNESCAPED_UNICODE')) -}}
    </code></pre>
  </div>
{% endblock %}

開発環境(environment: dev)での表示

  • dumpでは綺麗な表示に加えて、JavaScriptを使った変数の中身の開閉処理機能がある
  • json_encodeでも綺麗に表示できている

本番環境(environment: prod)での表示

  • 下記のようなエラーが出て表示できない
[2015-12-19 16:36:19] request.CRITICAL: Uncaught PHP Exception Twig_Error_Syntax: "Unknown "dump" function in ...

検証その2

  • 本番環境でもdumpできるように設定を変えて、本番環境での表示を確認する

app/config/config.yml

  • twig.debug の値を kernel.debug の値に影響されず、常にtrueを返すようにする
--- a/app/config/config.yml
+++ b/app/config/config.yml
@@ -33,7 +33,7 @@ framework:

 # Twig Configuration
 twig:
-    debug:            "%kernel.debug%"
+    debug:            true
     strict_variables: "%kernel.debug%"

 # Assetic Configuration

app/config/services.yml

  • twig.extension タグを付けた Twig_Extension_Debug のサービスを追加する
--- a/app/config/services.yml
+++ b/app/config/services.yml
@@ -7,3 +7,7 @@ services:
 #    service_name:
 #        class: AppBundle\Directory\ClassName
 #        arguments: ["@another_service_name", "plain_value", "%parameter_name%"]
+    my.twig.extension.debug:
+        class: Twig_Extension_Debug
+        tags:
+            - { name: 'twig.extension' }

本番環境(environment: prod)での表示

  • 本番環境でも dump が表示された
  • しかし、上述した開発環境で表示された形式になっていない
    • JavaScriptを使った変数の中身の開閉処理機能がない
  • この理由はTwigのdump関数で処理されているコードが別だから

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0