วิธีการดีบักตัวแปรใน Smarty เช่นเดียวกับใน PHP var_dump ()


164

ฉันมีตัวแปรภายในเทมเพลตและฉันไม่รู้ว่าฉันกำหนดไว้ที่ไหน ฉันจำเป็นต้องรู้ว่าอะไรอยู่ในตัวแปรเฉพาะ เช่นบอกว่าฉันมีตัวแปรใน Smarty memberเรียกว่า ฉันลองด้วย{debug}แต่มันใช้งานไม่ได้และไม่มีป๊อปอัปปรากฏขึ้น

ฉันจะส่งออก / แก้จุดบกพร่องตัวแปร smarty โดยใช้สิ่งที่ต้องการvar_dump()ภายในแม่แบบได้อย่างไร

คำตอบ:


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 (ดูคำตอบจากคริส) เป็นคำตอบที่ดีกว่ามาก
thelem

1
ด้วยเวอร์ชันล่าสุดของ Smarty การปิดใช้งาน{php}...{/php}แท็กวิธีที่ 2 หรือ 3 เป็นตัวเลือกที่ดีกว่า
ลุคสตีเวนสัน

1
ผลลัพธ์จะดูดียิ่งขึ้นหากคุณล้อมรอบด้วยแท็ก <pre> วิธีการด้านบนนั้นดีที่สุด
Alexander Kludt

2
เพิ่มพารามิเตอร์เพิ่มเติมลงใน print_r () เพื่อให้ผลลัพธ์กลับสู่ความฉลาดเพื่อหลีกเลี่ยงการสะท้อนเสียงเพิ่มเติมในตอนท้าย: {$ var | @print_r: true}
ivanhoe

120

สิ่งนี้น่าจะใช้ได้:

{$var|@print_r}

หรือ

{$var|@var_dump}

@ เป็นสิ่งจำเป็นสำหรับอาร์เรย์ที่จะทำให้ smarty เรียกใช้โมดิฟายเออร์กับทุกอย่างไม่เช่นนั้นจะใช้สำหรับแต่ละองค์ประกอบ


8
ดีกว่ามากแล้วคำตอบที่เลือก
ดาเมียน

ดีกว่าแล้วคำตอบที่เลือก? srsly? คำตอบที่เลือกมีวิธีแก้ปัญหาเหล่านั้นด้วย แต่มีอีกหนึ่งสำหรับรุ่น smarty ที่เก่ากว่าดังนั้นฉันไม่สามารถเข้าใจว่าคุณพูดได้ดีกว่า xD ที่เลือก
oliiix

24

สำหรับสิ่งที่คุ้มค่าคุณสามารถทำได้{$varname|@debug_print_var}เพื่อรับvar_dump()เอาต์พุต -esque สำหรับตัวแปรของคุณ


บางครั้งคุณไม่แน่ใจว่าตัวแปรคืออะไรและหลายต่อหลายครั้ง@print_rและ@var_dumpไม่ได้ผล (เช่นใน x-cart) แต่@debug_print_varเอาต์พุตอยู่ที่นั่น
skobaljic

ขอบคุณมาก! คำตอบของคุณคือสิ่งเดียวที่ทำงานกับฉัน
Tana

10

เพียงใช้ {debug} ใน. tpl ของคุณและดูซอร์สโค้ดของคุณ


3
ดี นี่เป็นการสร้างหน้าต่างแบบผุดขึ้นสำหรับฉันดังนั้นฉันไม่ต้องดูที่มา ต้องปิดการใช้งานตัวบล็อกป๊อปอัพของฉัน
กุ๊ย


5

ลองใช้กับเซสชัน Smarty:

{$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 เป็น TRUE ใน Smarty


แน่ใจว่าฉันรู้ว่า แต่ฉันต้องทำโดยไม่ต้อง modding ไฟล์ core php
streetparade

1

ในการดีบั๊กใน smarty ใน prestashop 1.6.x:

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

{ppp($variable)} -> debug only

แท็กดีบัก onther ที่มีประโยชน์:

{debug}


0

ในความฉลาดมีตัวปรับแต่งที่คุณสามารถใช้งานได้โดยใช้|(ตัวดำเนินการไพพ์ไลน์เดียว) เช่นนี้{$varname|@print_r}จะพิมพ์ค่าเป็นprint_r($php_variable)



0

{$variable|@debug_print_var nofilter}และคุณไม่จำเป็นต้องเพิ่ม<pre>แท็ก ""

{$variable|var_dump}แสดงให้คุณเห็นมากขึ้น (แต่การจัดรูปแบบแย่ลง) เพราะdebug_print_varไม่แสดงตัวแปรส่วนตัวในวัตถุ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.