PHP中Smarty模板变量判断的简化表达式咨询
在Smarty中简化isset判断的替代写法
针对你想要替代{if isset($data.name)}{$data.name}{/if}的需求,Smarty提供了几种更简洁的写法,完全可以实现类似PHP中??空合并运算符的效果:
1. 使用default修饰符(兼容所有Smarty 3+版本)
这是Smarty中最经典的简化方式,当变量未定义或为空时,会返回指定的默认值(这里是空字符串):
<input type="text" id="inputName" name="name" placeholder="Name" autofocus value="{$data.name|default:''}">
2. 使用PHP风格的空合并运算符(Smarty 3.1.30+支持)
如果你使用的是较新版本的Smarty(3.1.30及以上),可以直接用和PHP一致的??语法,完全符合你的使用习惯:
<input type="text" id="inputName" name="name" placeholder="Name" autofocus value="{$data.name ?? ''}">
额外建议:添加HTML转义
由于是在表单的value属性中输出变量,为了避免XSS安全问题,建议结合escape修饰符使用(可以和上面两种写法结合):
// 结合default <input type="text" id="inputName" name="name" placeholder="Name" autofocus value="{$data.name|default:''|escape:'html'}"> // 结合空合并运算符 <input type="text" id="inputName" name="name" placeholder="Name" autofocus value="{$data.name ?? ''|escape:'html'}">
这样既简化了代码,又能在表单验证不通过时正确保留用户输入的原有数据。
内容的提问来源于stack exchange,提问作者Agustín Sardón
相关产品推荐
相关产品推荐

