Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

PHP 小技集

Smartyで配列のダンプを表示させる5つの方法

投稿日:


Smartyといえば、言うまでもなくPHPの中ではとても有名なテンプレートエンジンです。自分でも長い事使ってきたんだけども、使い方が分からなくて困るほど難しい事をしてこなかったせいか全然深いところまで調べてませんでした。
ところが、今日配列(というかデータオブジェクト)の中身を確認しようと思って(要するに変数をvar_dumpしたかっただけなんだけど)調べてたら、色々方法があるみたいなのでメモっておきます。
※PHP初心者向きの情報かもしれません。オレ今日知ったけど(…)

1)デバッギングコンソールを使う

Smartyにはもともとデバッグ用の仕組みが用意されています。
http://www.smarty.net/manual/ja/chapter.debugging.console.php

require_once 'Smarty.class.php';
$smarty = new Smarty;
$smarty->debugging = true;

こんな感じで $debugging を有効にしておくと Smarty に assign された全ての変数を表示するでデバッキングコンソールが常に別ウィンドウで表示されるようになります。
特定のテンプレートだけで変数を確認したい場合は $debugging の代わりに、テンプレート変数{debug}を使用する事もできます。
この辺りは、下記ページに非常に丁寧にまとまっています。
cl.pocari.org – Smarty を使った開発でデバッグを行う 4 つの方法

2)debug_print_var modifier を使う

これも、上で紹介したcl.pocari.orgさんのエントリーで知りましたが、まさにvar_dump(というかprint_rに近いのかな?)みたいな modifier があるみたいです(なぜかマニュアルにのってない…)。

{$hoge|@debug_print_var}

modifier なので変数の後ろに「|」パイプで繋げるだけでOK。
$hogeが配列の場合は「@」を付けないと配列の内部まで表示しないので注意が必要。
(「@」の件は、この辺を参考にするとよさそう)

3)PHP関数のvar_dumpを暗黙の修飾子として使う

環境にもよりますが、SmartyからでもPHP関数を使う事ができます。

全ての PHP 関数は暗黙で修飾子として使用する事ができます。

via: Smarty

{$hoge|@var_dump}

「@」を付けているのは配列をダンプするためで、debug_print_varの時と同じです。
このように、別になにも悩まずにいつものvar_dumpが使えるのですね。
ただ、この「暗黙の修飾子」がセキュリティ上の理由で禁止されているかもしれません。
$securityがtrueになっている
$security_settings の MODIFIER_FUNCS に関数が登録せれていない
また、var_dumpと同じ様に@var_export、@print_rなんかも使えますので出力形式のお好みに合わせて使う事ができます。

4){php}関数でvar_dumpを実行する

Smarty内でPHPコードが実行できる{php}関数というのがあるのですが、これを使えばそれこそPHPと同じようにvar_dumpできます。
(テンプレートにロジックを持ち込む事自体よろしくない事とされてますのであんまり良い方法ではありませんが…)
ただ、PHP側の変数を扱うにはちょっとしたコツが必要で、

{php} ブロック内の PHP 変数にアクセスするには、PHP の global キーワードを使う必要があります。

via: Smarty

ということなので、

{php}
global $hoge;
var_dump($hoge);
{/php}

のように一旦global宣言する必要があります。

5)dump用のプラグインを使う

実際プラグインを作って自分好みのデバッグを行っている人もいるようです。
ダンプ用Smartyプラグインで快適デバッグ – Lism.in * blog
何度も見るのですから見易い方がいいですよね。
preprint_rみたいにちゃんとPREタグで整形したり、
こだわりがある人は自作してみるものいいかもしれません。
カスタム関数の勉強にもなるし。

まとめ

邪魔じゃなければ{debug}で一通り変数だしちゃうのが手っ取り早いかも。
「暗黙の修飾子」でvar_dump使うのは環境によってはNGなので(まあデバッグするような開発環境だったら $security = false でいいと思うけど)、変数ごとにやるなら debug_print_var を使うかなぁ。
こんなに方法があってもしょうがないんだけど、まあ知識として持っておいても損はしないでしょ。

-PHP, 小技集

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

Googleスプレッドシートのチェックボックスを便利に使う方法

2018年中旬、Googleスプレッドシートにチェックボックス機能が搭載されました。エクセル同様に、計算式やGAS(Google Apps Script)による高度なカスタマイズで、ビジネスの効率化に …

no image

第2回:<IMG>タグに関わる基本的な事

前回は画像にborderで装飾を付けるサンプルを書きましたが、今回は順番が前後するかもしれませんがもうちょっと基本的なルールについて記述します。

Googleドライブのフォーム機能は初期値をセットできる

とても便利なのにあまり知られていないらしいことが分かったのでエントリー。 Googleドライブのフォームは本当に便利で、アンケートやお問い合わせフォームが本当にサクッと数分でできちゃいます。以前書いた …

検索エンジン3社が開始した、rel=canonicalの使い方

Google、Yahoo!、Live(Microsoft)の3社が「ページの正当なURL」を定義するための方法を導入する事になったようです。 headタグの中にrel=”canonical …

no image

第7回:サムネイル作成APIをJavaScriptで簡単に切り替える方法

SimpleAPIをはじめたくさんのサムネイルAPIサービス(もちろん無料)のおかげで、簡単にサイトのスクリーンショットをサムネイル画像として自分のブログに貼り付ける事ができるようになりました。すでに …

スポンサードリンク

スポンサードリンク