代码之家  ›  专栏  ›  技术社区  ›  Tim Martin

使用smarty,是否可以对方法的返回值调用方法?

  •  2
  • Tim Martin  · 技术社区  · 14 年前

    我有智能密码

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

    Smarty抱怨表达式中存在“无法识别的标记”。如果我把它改成

    {$obj->foo()}
    

    它没有抱怨,所以我假设问题在于我对一个方法的结果调用了一个方法。这是Smarty解析器的一个限制,还是我在这里遗漏了其他东西?

    我知道我可以和 {assign} 我只是想知道我是否正确理解了限制的范围。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Jeff Standen    14 年前

    您使用的是Smarty2还是Smarty3?

    Smarty2需要您使用 {assign} 在第一种方法之后。如果将多个参数传递给一个方法,它也会有问题。

    Smarty3有一个完全重写的解析器,您可以完全按照自己的意愿进行操作。你也不再需要 {赋值} 就像你能做的一样 {$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!