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


156

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

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

답변:


251

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

{{ dump(user) }}

3
BTW, 관계형 매핑으로 객체를 덤프 할 때주의
pleerock

14
{{ dump() }}모든 변수를 덤프 하는 데 사용 하면 빈 페이지가 반환됩니다. 변수를 덤프하는 다른 방법이 있습니까?
제리 팜

최신 버전의 Symfony 2.5를 사용하고 있으며 개발 환경 용 커널을로드 할 때 config.yml 및 config_dev.yml 설정 및 디버그 모드가 설정되어 있습니다. 아래 Morland가 언급 한 다른 수동 방법을 시도했습니다. 어느 쪽이든, 덤프가 사용될 때 빈 페이지가 나타납니다. 그리고 덤프도 없습니다.
채드윅 마이어

당신이하고없는 빈 페이지가 표시되면 dump, 분명이 dump문제가 아닙니다. 다른 방법으로 알아낼 수 없으면 새 질문을 게시하는 것이 좋습니다.
Icode4food 2013 년

1
다음과 같은 오류가 발생합니다.`Twig_Error_Syntax-알 수없는 "덤프"함수
Pathros

28

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

{% debug expression.varname %}

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


7
라는 오류가 발생하면 여기에 설명 된대로 Unknown tag name "debug"구성을 전역 config.yml또는 확장 config_dev.yml하십시오. github.com/symfony/symfony-docs/issues/455#issuecomment-1884861
flu

5
이 방법은 Twig 1.5부터 사용되지 않습니다.
Icode4food

4
답변에 더 이상 사용되지 않는 메모를 추가했습니다.
igorw

17

그래서 부분적으로 약간 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 환경을 얻는 방법 / 위치를 여전히 알고 싶습니다.


1
btw : 캐시를 지우려면 콘솔 도구를 사용할 수 있습니다 ( stackoverflow.com/questions/6789950/… )
Raffael

그렇게하면 어떤 이점이 있습니까?
Alexander Morland

콘솔 도구를 모른다면 확인해보십시오.
Raffael

3
twig: debug: 1프론트 컨트롤러 환경에서이 정보를 상속하므로 설정하지 않아도됩니다 . 그렇지 않으면 제품 환경에서 무의식적으로 디버그 정보가 출력 될 수 있습니다. dev 환경에서 작업하는 한 기본적으로 활성화되어 있으며 prod 환경에서 비활성화되어 있습니다.
독감

1
이것은 Twig 1.5부터 구식입니다. 다른 답변보기 : stackoverflow.com/a/10080404/107768
Icode4food

14

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

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

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

그런 다음 템플릿에서 :

{{ my_variable | var_dump }}

그것들을 어디에 / 교체 할 $twig = new Twig_Environment($loader, array(...것인가?
PolGraphic 2016 년

5

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'
));

5

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

<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 (value)을 value | var_dump
matthijs koevoets

3

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

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

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


3

Symfony> = 2.6 이후에는 멋진 VarDumper 구성 요소가 있지만 Twig의 dump()기능 에는 사용되지 않습니다 .

덮어 쓰려면 확장을 만들 수 있습니다.

다음 구현에서 네임 스페이스를 바꾸는 것을 잊지 마십시오.

Fuz/AppBundle/Resources/config/services.yml

parameters:
   # ...
   app.twig.debug_extension.class: Fuz\AppBundle\Twig\Extension\DebugExtension

services:
   # ...
   app.twig.debug_extension:
       class: %app.twig.debug_extension.class%
       arguments: []
       tags:
           - { name: twig.extension }

Fuz/AppBundle/Twig/Extension/DebugExtension.php

<?php

namespace Fuz\AppBundle\Twig\Extension;

class DebugExtension extends \Twig_Extension
{

    public function getFunctions()
    {
        return array (
              new \Twig_SimpleFunction('dump', array('Symfony\Component\VarDumper\VarDumper', 'dump')),
        );
    }

    public function getName()
    {
        return 'FuzAppBundle:Debug';
    }

}

네, 이것을 찾고있었습니다 :)
Tim Strijdhorst

2

보다 빠른 참조를 위해 여기에 완전한 레시피가 있습니다 (모든 단계가 필수 임).

1) Twig를 인스턴스화 할 때 디버그 옵션을 전달하십시오.

$twig = new Twig_Environment(
$loader, ['debug'=>true, 'cache'=>false, /*other options */]
);

2) 디버그 확장 추가

$twig->addExtension(new \Twig_Extension_Debug());

3) @Hazarapet Tunanyan이 지적한 것처럼 사용하십시오.

{{ dump(MyVar) }}

또는

{{ dump() }}

또는

{{ dump(MyObject.MyPropertyName) }}

1

Twig 템플릿을 디버깅하려면 debug 문을 사용할 수 있습니다 .

여기에 이미지 설명을 입력하십시오

여기에서 디버그 설정을 명시 적으로 설정할 수 있습니다.


twig.debug를 설정하거나 설정하지 않고 '알 수없는 태그 이름 "debug"'가 표시됩니다. true
Alexander Morland

prod-mode로 작업하고 있다면 먼저 캐시를 비워야합니다
Raffael

@AlexanderMorland 안녕하세요 Alex, 오류를 제거하려면 github.com/symfony/symfony-docs/issues/455#issuecomment-1884861 에 설명 된대로 구성을 확장해야합니다 Unknown tag name "debug".
flu

1

편집 할 수 있습니다

/vendor/twig/twig/lib/Twig/Extension/Debug.php

변경 the var_dump()하는 기능을\Doctrine\Common\Util\Debug::dump()


3
공급 업체 폴더에서 아무것도 편집하지 않는 것이 좋습니다.
Luis Milanese

1

대부분의 훌륭한 PHP 프로그래머는 XDebug를 사용하여 실제로 코드 실행을 단계별로 실행하고 변수가 실시간으로 변경되는 것을보고 dump(), 나쁜 시절로 돌아가는 느낌을줍니다.

그래서 Twig Debug 확장을 만들어 Github에 넣었습니다.

https://github.com/delboy1978uk/twig-debug

composer require delboy1978uk/twig-debug

그런 다음 확장명을 추가하십시오. Symfony를 사용하지 않는 경우 다음과 같이하십시오.

<?php

use Del\Twig\DebugExtension;

/** @var $twig Twig_Environment */
$twig->addExtension(new DebugExtension());

서비스 YAML 구성에서 다음과 같은 경우 :

twig_debugger:
    class: Del\Twig\DebugExtension
    tags:
        - { name: twig.extension }

등록되면 이제 나뭇 가지 템플릿의 어느 곳에서나이 작업을 수행 할 수 있습니다.

{{ breakpoint() }}

이제 XDebug를 사용할 수 있으며 실행이 일시 중지되며 컨텍스트와 환경의 모든 속성을 볼 수 있습니다.

즐기세요! :-디


0

덤프 기능을 사용 하여 다음과 같이 인쇄 할 수 있습니다

{{ dump(MyVar) }}

하지만 하나의 좋은 것은 당신이 덤프 기능에 대한 인수를 설정하지 않으면, 그것은 인쇄 할 수도 있습니다 모든 변수를 사용할 수있는 등,

{{ dump() }}

예, 작동하지만 Twig를 인스턴스화 할 때 옵션에서 디버그가 활성화되어 있는지 확인해야합니다.
Tudor Ilisoi

0

dump기능을 사용할 수없는 환경에있는 경우 (예 : opencart) 다음을 시도해보십시오.

{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.