在smarty中分配新变量时连接字符串和变量

时间:2012-02-19 17:05:52

标签: templates smarty concatenation

我想连接一个已经分配的变量并将其保存到一个新变量,如下所示:

{assign var=permCat value="de.admin"}
{assign var=objectName value="myClass"}
{assign var=objectNameUpper value=$objectName|ucfirst}
{assign var=editPerm value=$permCat|cat:"canEdit"|cat:$objectNameUpper}

因此,生成的$editPerm应为:de.admin.canEditMyClass

我该怎么做?目前,它会抛出错误:Cannot use string as array offset...

1 个答案:

答案 0 :(得分:12)

您描述的错误不是由给定代码引起的。我假设您正在尝试构建一个字符串“de.admin.canEditMyClass”以用作变量{$builtString.foo}。这就是错误发生的地方,因为smarty并没有将你的字符串神奇地转换为变量引用。

如果你正在使用Smarty2:

{assign var=objectName value="myClass"}
{assign var=objectNameUpper value=$objectName|ucfirst}
{assign var=editPerm value="canEdit"|cat:$objectNameUpper}
{$de.admin.$editPerm.foo}

如果你正在使用Smarty3:

{$de.admin.{"canEdit"|cat:{"myClass"|ucfirst}}.foo}