Smarty 3.1.32字符串模板变量不渲染问题求助
问题根源:PHP双引号字符串的自动变量解析
你的问题出在PHP双引号字符串的自动变量解析上!
看你的代码:
$template = "<h1>Hello {name},</h1>";
在PHP中,双引号包裹的字符串里,{name}会被当作变量$name来解析——而你当前代码里并没有定义$name变量,所以PHP会把{name}替换成空字符串。最终传递给Smarty的模板内容其实是<h1>Hello ,</h1>,根本就没有{name}这个Smarty变量标记,自然无法被渲染。
解决方案
有三种简单的修复方式:
使用单引号包裹模板字符串
单引号里的内容不会被PHP解析,能完整保留{name}标记:$template = '<h1>Hello {name},</h1>'; $smarty->assign('name','Christian'); $output = $smarty->fetch('string:' . $template); echo $output;在双引号中转义
{和}
用反斜杠转义分隔符,避免PHP解析:$template = "<h1>Hello \{name\},</h1>";使用NOWDOC语法(PHP 5.3+)
这种写法和单引号类似,但更适合多行模板:$template = <<<'EOT' <h1>Hello {name},</h1> EOT;
这样修改后,Smarty就能拿到包含{name}的完整模板字符串,正常渲染变量了。
内容的提问来源于stack exchange,提问作者wwl
相关产品推荐
相关产品推荐

