You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:31:01