我有Smarty代码
{$obj->foo()->bar()}
和Smarty在表达中抱怨'无法识别的标签'。如果我将其改为
{$obj->foo()}
它没有抱怨,所以我认为问题在于我正在调用方法结果的方法。这是Smarty解析器的限制,还是我错过了其他的东西?
我知道我可以用{assign}
解决这个问题,我只是想知道我是否正确理解了这些限制的程度。
答案 0 :(得分:2)
您使用的是Smarty2还是Smarty3?
Smarty2将要求您在第一种方法后使用{assign}
。如果将多个参数传递给方法,也会出现问题。
Smarty3有一个完全重写的解析器,你可以完全按照自己的意愿行事。您也不再需要{assign}
,因为您只需{$new_var = "Anything"}
。
这是Smarty3中的一项测试:
我们的课程
class Foo {
function boo() {
return new Boo();
}
}
class Boo {
function woo() {
return "woo!";
}
}
分配的模板变量
$foo = new Foo();
$tpl->assign('foo', $foo);
模板
{$foo->boo()->woo()}
浏览器输出
woo!