我有 Smarty 代码
{$obj->foo()->bar()}
Smarty 提示表达式中存在“无法识别的标签”。如果我把它改成只是
{$obj->foo()}
它不会提示,所以我认为问题在于我正在对方法的结果调用方法。这是 Smarty 解析器的限制,还是我在这里遗漏了其他内容?
我知道我可以使用 {assign}
解决这个问题,我只是想知道我是否正确理解了限制的程度。
最佳答案
您使用的是Smarty2还是Smarty3?
Smarty2 将要求您在第一个方法之后使用 {assign}
。如果您向一个方法传递多个参数,也会出现问题。
Smarty3 有一个完全重写的解析器,你可以完全做你想做的事。您也不再需要{assign}
,因为您只需执行{$new_var = "Anything"}
即可。
这是 Smarty3 中的测试:
我们的类(class)
class Foo {
function boo() {
return new Boo();
}
}
class Boo {
function woo() {
return "woo!";
}
}
分配的模板变量
$foo = new Foo();
$tpl->assign('foo', $foo);
模板
{$foo->boo()->woo()}
浏览器输出
woo!
关于php - 使用Smarty,是否可以根据方法的返回值调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651703/