[debugging] 나뭇 가지 템플릿에서 변수를 var_dump하는 방법은 무엇입니까?

주어진 내용 만 제시하는보기 레이어 패턴은 훌륭하지만 모든 것이 가능한지 어떻게 알 수 있습니까? TWIG에 “모든 정의 된 변수 나열”기능이 있습니까? 변수를 덤프하는 방법이 있습니까?

내가 찾은 해결책은 function 을 주입하여 기존의 PHP 디버그 도구 를 사용할 수있는 함수를 정의하는 것이었지만, 내가 찾은 모든 참조에는이 멋진 두 줄의 코드가 포함되어 있지만 어디에 어디에도 지정되어 있지 않습니다. 그들을 배치하십시오. $ loader 변수가 정의 되어 있다는 사실에 따라 /app/config/autoload.php를 시도했지만 $ loader에 잘못된 종류가 있습니다. 나뭇 가지 함수를 추가하기 위해 PHP 코드를 어디에 배치합니까?



답변

Twig 1.5부터 정답은 덤프 기능을 사용하는 것입니다. Twig 문서에 완전히 문서화되어 있습니다 . 다음은 Symfony2에서이를 활성화하기위한 설명서입니다.

{{ dump(user) }}


답변

여기debug 에 설명 된 태그 를 사용할 수 있습니다 .

{% debug expression.varname %}

편집 : Twig 1.5 dump부터는 더 이상 사용되지 않으며 새로운 기능으로 대체되었습니다 (이제 기능이며 더 이상 태그가 아닙니다). 위의 답변도 참조하십시오.


답변

그래서 부분적으로 약간 hackish가 작동했습니다.

  1. 설정 twig: debug: 1에서app/config/config.yml
  2. 이것을 config_dev.yml에 추가하십시오

    services:
        debug.twig.extension:
            class: Twig_Extensions_Extension_Debug
            tags: [{ name: 'twig.extension' }]
    
  3. sudo rm -fr app/cache/dev

  4. 대신 내 자신의 디버그 기능을 사용하기 위해 print_r()열고 vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php변경했습니다.print_r(d(

추신. 필터와 확장을 추가하기 위해 $ twig 환경을 얻는 방법 / 위치를 여전히 알고 싶습니다.


답변

응용 프로그램에서 Twig를 구성 요소 로 사용하는 경우 다음을 수행 할 수 있습니다.

$twig = new Twig_Environment($loader, array(
    'autoescape' => false
));

$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));

그런 다음 템플릿에서 :

{{ my_variable | var_dump }}


답변

Twig를 독립 실행 형 구성 요소로 사용하는 경우 덤프 (변수) 기능이 즉시 작동 하지 않을 수 있으므로 디버깅을 활성화하는 방법에 대한 몇 가지 예가 있습니다.

독립형

이것은 icode4food에서 제공하는 링크에서 발견되었습니다.

$twig = new Twig_Environment($loader, array(
    'debug' => true,
    // ...
));
$twig->addExtension(new Twig_Extension_Debug());

실 렉스

$app->register(new \Silex\Provider\TwigServiceProvider(), array(
    'debug' => true,
    'twig.path' => __DIR__.'/views'
));


답변

모든 사용자 정의 변수를 덤프하십시오.

<h1>Variables passed to the view:</h1>
{% for key, value in _context %}
    {% if key starts with '_' %}
    {% else %}
        <pre style="background: #eee">{{ key }}</pre>
        {{ dump(value) }}
    {% endif %}
{% endfor %}

내 플러그인을 사용할 수 있습니다 (출력을 멋지게 형식화 할 것입니다).

나뭇 가지 덤프 바


답변

{{ dump() }}나를 위해 작동하지 않습니다. PHP질식. 중첩 수준이 너무 깊습니다.

debug사용하는 경우 템플릿 을 실제로 수정 해야하는 debugger것은 이와 같은 확장 입니다.

그런 다음 중단 점을 설정하고 {{ inspect() }}필요할 때마다 전화 하면됩니다. {{ dump() }}디버거 와 동일한 정보를 얻습니다 .