Cách gỡ lỗi biến trong Smarty như trong PHP var_dump ()


163

Tôi có một số biến trong một mẫu và tôi không biết tôi đã gán chúng ở đâu. Tôi cần biết những gì bên trong một biến số cụ thể; ví dụ, giả sử tôi có một biến trong smarty được gọi member. Tôi đã thử với {debug}nhưng nó không hoạt động và không có cửa sổ bật lên nào được hiển thị.

Làm cách nào tôi có thể xuất / gỡ lỗi các biến thông minh bằng cách sử dụng một cái gì đó như var_dump()bên trong các mẫu?

Câu trả lời:


328

Bạn có thể sử dụng {php}thẻ

Phương pháp 1 (sẽ không hoạt động trong Smarty 3.1 trở lên):

{php}

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

{/php}

Cách 2:

{$var|@print_r}

Cách 3:

{$var|@var_dump}

Sử dụng các thẻ php không phải là thông lệ tốt và lý tưởng nhất là chúng nên bị vô hiệu hóa vì lý do bảo mật. @debug_print_var (xem câu trả lời từ Chris) là một giải pháp tốt hơn nhiều.
thelem

1
Với phiên bản mới nhất của Smarty vô hiệu hóa các {php}...{/php}thẻ, Phương thức 2 hoặc 3 là các tùy chọn tốt hơn.
Luke Stevenson

1
Đầu ra trông thậm chí còn tốt hơn nếu bạn bao quanh nó bằng các thẻ <pre>. Các phương pháp trên là tốt nhất.
Alexander Kludt

2
Thêm một tham số bổ sung vào print_r () để làm cho nó trả lại đầu ra cho smarty, để tránh tiếng vang phụ ở cuối: {$ var | @print_r: true}
ivanhoe 13/12/14

120

Điều này sẽ làm việc:

{$var|@print_r}

hoặc là

{$var|@var_dump}

@ Là cần thiết cho các mảng để làm cho smarty chạy công cụ sửa đổi đối với toàn bộ, nếu không thì nó làm điều đó cho từng phần tử.


8
Tốt hơn nhiều thì câu trả lời đã chọn.
Damien

tốt hơn thì câu trả lời được chọn? đau khổ? câu trả lời được chọn cũng có những giải pháp đó nhưng chỉ chứa một giải pháp nữa cho các phiên bản thông minh cũ hơn, vì vậy tôi thực sự không thể hiểu làm thế nào bạn có thể nói nó tốt hơn câu trả lời được chọn
oliiix

24

Đối với những gì nó có giá trị, bạn có thể làm {$varname|@debug_print_var}để có được một var_dump()đầu ra -esque cho biến của bạn.


Đôi khi bạn không chắc chắn biến đó là gì và nhiều lần @print_r@var_dumpkhông hoạt động (ví dụ trong x-cart), nhưng @debug_print_varđầu ra đã ở đó.
skobaljic

Cám ơn rất nhiều! Câu trả lời của bạn là duy nhất làm việc cho tôi.
Tana

10

chỉ cần sử dụng {debug} trong .tpl của bạn và xem mã nguồn của bạn


3
Đẹp. Điều này thực sự tạo ra một cửa sổ bật lên cho tôi, vì vậy tôi không phải xem nguồn. Phải vô hiệu hóa trình chặn cửa sổ bật lên của tôi.
Hobo


5

Hãy thử với Phiên Smarty:

{$smarty.session|@debug_print_var}

hoặc là

{$smarty.session|@print_r}

Để làm đẹp đầu ra của bạn, sử dụng nó giữa <pre> </pre>các thẻ


2

Nếu bạn muốn một cái gì đó đẹp hơn tôi sẽ khuyên

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

chỉ cần thay thế yourvariable bởi biến của bạn


1

thử cái này .... Đặt $debugging thành TRUE trong Smarty.


chắc chắn tôi biết điều đó, nhưng tôi cần phải làm điều đó mà không cần sửa đổi các tập tin php cốt lõi
streetparade

1

Để gỡ lỗi trong smartyop trong 1.600:

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

{ppp($variable)} -> debug only

Một thẻ gỡ lỗi hữu ích:

{debug}

1

trong V3 thông minh, bạn có thể sử dụng

{var_dump($variable)}


0

Trong smarty có tích hợp bộ sửa đổi, bạn có thể sử dụng nó bằng cách sử dụng |(toán tử đường ống đơn). Như thế này {$varname|@print_r}sẽ in giá trị nhưprint_r($php_variable)


0

Tôi thích sử dụng <script>console.log({$varname|@json_encode})</script>để đăng nhập vào giao diện điều khiển.


0

{$variable|@debug_print_var nofilter}và bạn không cần thêm <pre>thẻ ""

{$variable|var_dump}hiển thị cho bạn nhiều hơn (nhưng định dạng kém hơn) vì debug_print_varkhông hiển thị biến riêng tư trong đối tượng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.