How to Neatly Dump Variables in Drupal for Debugging

By kong

เวลาพัฒนาโมดูล / ธีมใน Drupal สิ่งหนึ่งที่มักจะต้องทำบ่อยๆ คือการ dump ค่าตัวแปรใน Drupal ออกมาดู วิธีที่ง่ายที่สุดคือใช้คำสั่ง <a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="sy0">&lt;</span>variable<span class="sy0">&gt;</span><span class="br0">&#41;</span> แต่ผลลัพธ์ที่ได้ส่วนใหญ่จะเป็น string เละๆ อยู่ในส่วนบนสุดของหน้านั้นๆ ทำให้อ่านลำบากอย่างแรง

เห็น @sugree แนะนำบ่อยๆ ว่าให้ใช้ drupal_set_message<span class="br0">&#40;</span><span class="br0">&#41;</span> เวลา dump ค่าตัวแปร ลองดูแล้วปรากฏว่ามันใช้ไม่ได้กับ print_r() เนื่องจาก print_r() จะพรินท์ค่าออกมาทันที ไม่ได้ return ค่าเป็น string กลับมาให้ drupal_set_message()

วิธีแก้คือใช้ output buffering ช่วยอีกที สมมติว่าต้องการ dump ค่าในตัวแปร <span class="re0">$vars</span><span class="br0">&#91;</span><span class="st_h">'node'</span><span class="br0">&#93;</span> ก็เขียนโค้ดแบบนี้

<?php
 
ob_start();
print_r($vars['node']);
drupal_set_message(ob_get_contents());
ob_end_clean();
 
?>

จะได้โครงสร้างของตัวแปร $vars['node'] อยู่ในกล่องข้อความของ Drupal อย่างเป็นระเบียบเรียบร้อย อ่านง่ายกว่าเดิมเยอะ :)