Smarty 5.3升级后无法使用默认修饰符,如何添加支持?
Smarty 5.3 恢复count修饰符及添加默认修饰符支持方案
一、恢复count修饰符的使用
Smarty 5.x 对内置修饰符的默认注册逻辑做了调整,count这类原内置修饰符不再全局默认可用,可通过两种方式解决:
- 替代写法(推荐):直接使用Smarty 5支持的原生函数调用语法,替换原修饰符写法:
原模板代码:{$array|count}
替换为:{count($array)}
这种写法无需额外配置,性能更贴合Smarty 5的设计逻辑。 - 手动注册修饰符:在初始化Smarty实例的PHP代码中,直接注册PHP原生
count函数作为Smarty修饰符:
注册后即可继续使用$smarty->registerPlugin('modifier', 'count', 'count');{$array|count}的旧写法。
二、无plugins目录时添加默认修饰符支持
addDefaultModifiers不需要依赖plugins目录,直接通过代码注册即可实现,分两种场景:
场景1:使用原生PHP函数或已注册的修饰符作为默认修饰符
如果只是要给所有变量自动应用单个或多个已有修饰符(比如html转义),直接在初始化代码中添加:
// 给所有变量默认添加html转义 $smarty->addDefaultModifiers(['htmlspecialchars']); // 若需同时应用多个,按顺序传入数组 $smarty->addDefaultModifiers(['trim', 'htmlspecialchars']);
场景2:自定义默认修饰符逻辑
如果需要组合多个逻辑作为默认修饰符(比如数组自动计数、字符串自动转义),先注册自定义修饰符,再添加为默认修饰符:
// 注册自定义修饰符 $smarty->registerPlugin('modifier', 'default_process', function($value) { if (is_array($value)) { return count($value); } return htmlspecialchars(trim($value), ENT_QUOTES, 'UTF-8'); }); // 设置为默认修饰符 $smarty->addDefaultModifiers(['default_process']);
注意事项
- 无需为了适配
addDefaultModifiers特意创建plugins目录,Smarty 5支持直接通过代码注册修饰符,更轻量化。 - 优先使用Smarty 5推荐的原生函数调用语法,减少对旧修饰符逻辑的依赖,提升模板渲染性能。
内容的提问来源于stack exchange,提问作者fifi94
相关产品推荐
相关产品推荐

