【PHP】テンプレート中でいつでも読める var_dump 的なことをする

  • 2020年10月28日
  • PHP

 テンプレート中で var_dump すべき様な PHP のロジックが動いているコードはそれだけで疑問符がつく整理のされてなさなのですが、テンプレート中で var_dump 相当(Laravel の dump 関数、 FuelPHP の Debug::dump メソッドなど)をしたい時はあります。そういった時、単に var_dump 相当の処理を実行すると HTML 内に埋もれることがあります。この記事では、そういった事態を避けて値の中身を画面上に見やすく出力する方法を紹介します。
 これは次で行えます。

<?php $知りたい変数 = ['<div>hoge</div>',range(1,10)]?>
<div style="height: 0; width: 0">
	<pre style="background: white; border: solid 1px; position: absolute; z-index: 10000;"><?php echo htmlspecialchars(json_encode($知りたい変数, JSON_PRETTY_PRINT));?></pre>
</div>

 こうすると要素として埋もれてしまう場所でも次画像の様に var_dump 的なことができます。例では素の HTML と PHP ですが twig, blade の様なテンプレート内でも同様のことができます( twig の様に直に PHP を書けない場合は独自タグなどのテンプレートエンジンの改造機能中で同じように整形結果を echo します)。

 以下解説です。
 この処理は HTML/CSS 部と PHP 部に分けられます。PHP 部は次です。

<?php echo htmlspecialchars(json_encode($知りたい変数, JSON_PRETTY_PRINT));?>

 JSON_PRETTY_PRINT オプションをつけることで空白で整えられた JSON 文字列を取得し、htmlspecialchars によって HTML が関係ない時の見た目と同じになる様に HTML の特殊文字として解釈される文字を変換します。
PHP: json_encode – Manual
PHP: JSON定義済み定数 – Manual
PHP: htmlspecialchars – Manual
 HTML/CSS 部は次です。

<pre style="background: white; border: solid 1px; position: absolute; z-index: 10000;">ここにdump結果</pre>

 上述の整形された dump 結果を pre 要素の innerText として出力結果を渡すことによって、空白をそのまま反映した等幅フォントで文字列を見えるようにします。
<pre>: 整形済みテキスト要素 – HTML: HyperText Markup Language | MDN
 これに加えて CSS の background: white; border: solid 1px; によって web ページの背景に関わらず読みやすい色合いに出力結果の台紙を定義します。最後に position: absolute; z-index: 10000; で出力した pre 要素の親要素のサイズに関わらず出力全体を元ページのデザインを崩すことなく見れる様にして一通り完成です。
 ワンライナーということもあり json_encode できない対象の中身は見れず、デザインも簡素ですが、同様の方針でがっつり処理を組むことでフレームワークの dump 関数の様な独自 dump も組めます。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG