PHP var_dump ()에서와 같이 Smarty에서 변수를 디버깅하는 방법


164

템플릿 안에 변수가 있는데 어디에 할당했는지 알 수 없습니다. 특정 변수 안에 무엇이 있는지 알아야합니다. 예를 들어 smarty에이라는 변수가 있다고 가정 해보십시오 member. 시도 {debug}했지만 작동하지 않았으며 팝업이 표시되지 않았습니다.

var_dump()템플릿 내부 와 같은 것을 사용하여 smarty 변수를 어떻게 출력 / 디버그 할 수 있습니까?

답변:


330

{php}태그 를 사용할 수 있습니다

방법 1 (Smarty 3.1 이상에서는 작동하지 않음) :

{php}

$var =
$this->get_template_vars('var');
var_dump($var);

{/php}

방법 2 :

{$var|@print_r}

방법 3 :

{$var|@var_dump}

PHP 태그에 의지하는 것은 좋은 습관이 아니며 이상적으로는 보안상의 이유로 비활성화해야합니다. @debug_print_var (Chris의 답변 참조)가 훨씬 나은 해결 방법입니다.
thelem

1
최신 버전의 Smarty에서 {php}...{/php}태그를 비활성화하면 방법 2 또는 3이 더 나은 옵션입니다.
Luke Stevenson

1
<pre> 태그로 둘러싸면 출력이 훨씬 좋아집니다. 위의 방법이 가장 좋습니다.
Alexander Kludt

2
끝에 추가 에코를 피하기 위해 print_r ()에 추가 매개 변수를 추가하여 출력을 smarty로 리턴하십시오. {$ var | @print_r : true}
ivanhoe

120

이것은 작동해야합니다 :

{$var|@print_r}

또는

{$var|@var_dump}

@는 배열이 모든 것에 대해 수정자를 실행하기 위해 필요합니다. 그렇지 않으면 각 요소에 대해 수정자를 수행합니다.


8
선택한 답변보다 훨씬 낫습니다.
Damien

선택한 답변보다 낫습니까? srsly? 선택한 대답은 너무 거기에 그 솔루션을 가지고 있지만 당신이 더 나은 선택 일의 xD보다 더 말할 수 있는지 정말 얻을 수 있습니다 만, 한 번 더 오래된 유식 버전 포함
oliiix

24

그만한 가치가 있다면 변수에 대해 -esque 출력 {$varname|@debug_print_var}을 얻을 수 있습니다 var_dump().


때때로 당신은 변수가 여러 번 무엇 확실하지 않은 @print_r@var_dump(예를 들어 X-장바구니에) 작동하지 않았다, 그러나 @debug_print_var출력이이었다.
skobaljic

정말 고마워! 당신의 대답은 나에게서 작동하는 유일한 것입니다.
Tana

10

.tpl에서 {debug}를 사용하고 소스 코드를 확인하십시오.


3
좋은. 이것은 실제로 나를 위해 팝업 창을 만들었으므로 소스를 볼 필요가 없었습니다. 그래도 팝업 차단기를 비활성화해야했습니다.
Hobo


5

Smarty Session을 사용해보십시오.

{$smarty.session|@debug_print_var}

또는

{$smarty.session|@print_r}

출력을 아름답게하려면 <pre> </pre>태그 사이에 사용하십시오


2

더 아름다운 것을 원한다면 나는 조언 할 것이다.

{"<?php\n\$data =\n"|@cat:{$yourvariable|@var_export:true|@cat:";\n?>"}|@highlight_string:true}

단지 대체 yourvariable을 당신의 변수


1

이것을 시도하십시오 .... $debugging Smarty에서 TRUE로 설정하십시오 .


확실히 알지만 핵심 PHP 파일을 수정하지 않고해야합니다
streetparade

1

prestashop 1.6.x에서 smarty로 디버깅하려면 :

{ddd($variable)} -> debug and die

{ppp($variable)} -> debug only

유용한 디버그 태그 :

{debug}

1

smarty V3에서는 이것을 사용할 수 있습니다

{var_dump($variable)}


0

smarty에는 |(단일 파이프 라인 연산자)를 사용하여 사용할 수있는 수정자가 내장되어 있습니다 . 이처럼 {$varname|@print_r}값을 인쇄합니다print_r($php_variable)


0

<script>console.log({$varname|@json_encode})</script>콘솔에 로그인 하는 것을 선호합니다 .


0

{$variable|@debug_print_var nofilter}" <pre>"태그 를 추가 할 필요가 없습니다

{$variable|var_dump}debug_print_var객체에 개인 변수를 표시하지 않기 때문에 더 많이 (그러나 더 나쁜 형식화) 표시하십시오!

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