2010-09-06 3 views
2

J'ai le code SmartyEn utilisant Smarty, est-il possible d'appeler une méthode sur la valeur de retour d'une méthode?

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

et Smarty se plaint de 'tag non reconnu' dans l'expression. Si je change à juste

{$obj->foo()} 

il ne se plaint pas, donc je suppose que le problème est le fait que j'appelle une méthode sur le résultat d'une méthode. Est-ce une limitation de l'analyseur de Smarty, ou est-ce que je manque quelque chose d'autre ici?

Je sais que je peux contourner cela avec {assign}, je voulais juste savoir si j'avais compris l'ampleur des limitations correctement.

+0

Autant que je m'en souvienne (mon temps Smarty s'est terminé il y a environ 5 ans?) J'utilisais '{assign}' pour cela. Il pourrait y avoir une solution plus élégante, mais je pense que j'ai cherché à l'époque, et c'est tout ce que j'ai pu trouver. Bonne chance! – janosrusiczki

Répondre

2

Utilisez-vous Smarty2 ou Smarty3? Smarty2 nécessitera l'utilisation de {assign} après la première méthode. Il aura également des problèmes si vous passez plus d'un argument à une méthode. Smarty3 a un analyseur complètement réécrit et vous pouvez faire exactement ce que vous voulez. Vous n'avez plus besoin de {assign}, car vous pouvez simplement faire {$new_var = "Anything"}.

est ici un test Smarty3:

Nos cours

class Foo { 
    function boo() { 
     return new Boo(); 
    } 
} 

class Boo { 
    function woo() { 
     return "woo!"; 
    } 
} 

variables de modèles attribué

$foo = new Foo(); 
$tpl->assign('foo', $foo); 

Modèle

{$foo->boo()->woo()} 

Sortie navigateur

woo! 
+0

J'utilisais Smarty 2, mais il est bon de savoir que Smarty 3 le corrige. Je peux mettre à jour quand il s'agit d'une version finale. –

Questions connexes