2010-09-06 75 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

相關問題