初めて投稿させて頂くexceptionCatcherと申します。
先日RC版のSmarty3.0RC4を試してみました。
(WinXPのXAMPP/PHP5.3.1環境で試用しました。)
皆様と情報共有できればと思い、気付いた点等を記します。
(1)改善された点
Class定数がSmartyテンプレート側で使用できるようになりました。
(2)改悪された点
register_modifier機能でNoticeエラーが発生しました。
※簡単に補足します。
【PHP側の定数定義クラスファイル】
class ComCst{
const MAX_LEN_MAD = 256;//メールアドレス最大長
:
}
【PHP側のユーティリティ関数定数クラスファイル】
class ComUtil{
//htmlspecialchars関数では半角スペースと円記号が変換されないので
//各々を 、¥に置き換える関数です。
public static function hsc($val){
$s = htmlspecialchars($val , ENT_QUOTES);
$s = str_replace(' ' , ' ' , $s);
$s = str_replace("\\" , '¥' , $s);
return $s;
}
:
}
【PHP側のSmarty操作ロジック】
$smarty = new Smarty();
:
$smarty->register_modifier('hsc' , array('ComUtil' , 'hsc'));
$smarty->register_modifier('hsc' , 'ComUtil::hsc');
$smarty->assign('test_msg' , 'A△△△B\C');//△は半角スペースです。
$smarty->display('test.tpl');
exit;
【Smartyテンプレートファイル(test.tpl)】
:
<input type="text" name="in_mail_adr" maxlength="{$smarty.const.ComCst::MAX_LEN_MAD}" ・・・
:
テストメッセージ:{$test_msg|hsc}
:
Smarty2系ではテンプレート内からPHP側でdefine関数で定義した定数は参照できましたが
Class定数が参照できません。ところがSmarty3系では
{$smarty.const.ComCst::MAX_LEN_MAD}
のような記述で参照できるようになりました。
これが改善された点です。
Smarty3系ではregister_modifierでNoticeエラーが発生します。
自作hsc関数は期待通りに動作し、
A△△△B\C
という文字列が
A B¥C
変換されるのですが、なぜかNoticeエラーが発生します。
(注)テンプレートファイルの
{$test_msg|hsc}は
{$test_msg|htmlspecialchars:$smarty.const.ENT_QUOTES|replace:' ':' '|replace:'\\':'¥'}と同じことを実現するものですが、冗長になって読みずらいので
register_modifier機能を利用しています。
【その他】
Smarty3系が正式リリースされれば、そちらへの乗り換えも検討しようと思っています。
もしSmarty3系におけるregister_modifierの扱いをご存知の方、あるいは
RC版を試用されて上記以外の2系との違い等を認識しておられる方がおられたら
アドバイスを頂ければ嬉しいです。
以上ご参考までに。