2010-09-06 80 views
2

我有Smarty的代码使用Smarty,是否可以在方法的返回值上调用方法?

{$obj->foo()->bar()} 

和Smarty的抱怨在表达“无法识别的标签”。如果我将其更改为只

{$obj->foo()} 

它不抱怨,所以我想这个问题是事实,我呼吁的方法的结果的方法。这是Smarty解析器的限制吗,还是我在这里丢失了别的东西?

我知道我可以解决这个与{assign},我只是想知道如果我理解正确的限制程度。

+0

尽管我记得(我的Smarty时间大约在5年前结束?),我为此使用了'{assign}'。可能会有一个更优雅的解决方案,但我想我在那时搜索了一遍,这是我能找到的。祝你好运! – janosrusiczki 2010-09-06 13:58:32

回答

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! 
+0

我使用Smarty的2,但它是很好的了解,Smarty的3个修复它。当它有最终版本时,我可能会更新。 – 2010-09-24 07:52:48

相关问题