Fat-Free Framework模板HTML属性条件渲染语法错误解决问询
解决Fat-Free Framework模板中HTML属性条件渲染的语法错误
你的问题出在三元运算符不完整——F3模板引擎会把{{ }}内的代码直接解析为PHP,而PHP要求三元运算符必须包含condition ? true_expr : false_expr的完整结构,你只写了true分支,导致PHP语法报错。
下面是几种可行的解决方式:
1. 补全三元运算符的else分支
直接补充空字符串作为false分支,语法就合法了:
<select name="access_level"> <option value="Simple User" {{ @User['access_level'] === "Simple User" ? "selected" : "" }}> Simple User </option> <option value="Administrator" {{ @User['access_level'] === "Administrator" ? "selected" : "" }}> Administrator </option> </select>
2. 使用F3内置的check函数(更简洁)
F3模板提供了check()辅助函数,专门用于这类条件输出场景,当第一个参数为true时,输出第二个参数的内容,否则输出空:
<select name="access_level"> <option value="Simple User" {{ check(@User['access_level'] === "Simple User", 'selected') }}> Simple User </option> <option value="Administrator" {{ check(@User['access_level'] === "Administrator", 'selected') }}> Administrator </option> </select>
3. 遍历选项列表(更易维护)
如果后续可能增加更多访问级别,建议先在PHP逻辑层定义选项数组,再在模板中循环渲染,减少重复代码:
PHP代码(控制器/路由中)
$f3->set('accessOptions', [ 'Simple User' => 'Simple User', 'Administrator' => 'Administrator' ]);
模板代码
<select name="access_level"> {{ foreach @accessOptions as value => label }} <option value="{{ value }}" {{ check(@User['access_level'] === value, 'selected') }}> {{ label }} </option> {{ end }} </select>
内容的提问来源于stack exchange,提问作者Universe
相关产品推荐
相关产品推荐

