速度中的动态变量

时间:2013-06-20 13:50:14

标签: velocity dynamic-variables

我在这里看了几个答案,我很难得到我正在寻找的东西,所以也许我会根据自己的情况提出这个问题:

首先,让我说我是非常新的Velocity,但我非常精通PHP。我知道我们在这里将苹果与橘子进行比较,但只是通过这个例子来承担我。

想象一下:我在数据库中新鲜的对象数组中有一些数据。每条记录中都有一个唯一标识符。我想在对象中使用这个唯一标识符作为变量名。

在PHP中,这很简单:

<?php

    $goalObject = new stdObject();

    foreach ($row as $data)
    {
        $identifier = $data->unique_id;            

        $goalObject->$$identifier = new stdObject();

        $goalObject->$$identifier->name = $data->name;
        $goalObject->$$identifier->total = $data->num_apples + $data->num_oranges;
    }

请注意identifier $$ )的双重印记。

现在,值得注意的是unique_id确实以字母开头,所以它应该可以用作变量名。一个例子unique_id就像AAA0000或类似的东西。没有空格,没有连字符,没有任何标点符号。

因此,我的目标对象是$goalObject->AAA0000->name$goalObject->AAA0000->total。 (或者在Velocity中$goalObject.AAA0000.name$goalObject.AAA0000.total。)

如果我能做那样的话,我会很开心的。但据我所知,Velocity不允许任何像这样酷的东西。

拜托,有人在这里帮助我。

提前感谢您提出的任何答案。

1 个答案:

答案 0 :(得分:0)

这不是我想要的,但我设法使用地图来实现这一点。我想我只是不完全明白其他答案在说什么。通常情况下,我会删除这篇文章并假装从未发生过,但可能会有人出现类似问题。

为了让$goalObject.AAA0000.name起作用,我必须创建一张地图。

#set($goalObject = {})

#foreach ($data in $row)
    #set($identifier = $data.unique_id)

    #set($name = $data.name)
    #set($total = $data.num_apples + $data.num_oranges)

    #set($dummy = $goalObject.put({
        'name'  : $name,
        'total' : $total
    }))
#end

到目前为止,这对我有用,但我不必输入$goalObject.AAA0000.name,而是使用$goalObject.get("AAA0000").name。我很高兴它正在发挥作用。