2013-06-20 3 views
0

Я просмотрел несколько ответов здесь, и я просто совершенно не могу получить то, что я ищу, так что, может быть, если я спрошу его исключительно к моей ситуации:динамические переменные в скорости

Во-первых, давайте я говорю, что я очень новый для 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. (Или $goalObject.AAA0000.name и $goalObject.AAA0000.total в скорости.)

Если бы я мог сделать что-то подобное, я был бы так счастлив. Но из того, что я могу сказать, Velocity не позволяет ничего такого крутого, как это.

Пожалуйста, помогите мне здесь.

Заранее благодарю за любые ответы, которые я могу получить.

+0

Это похоже на дубликат недавней публикации: http://stackoverflow.com/questions/17084542/construct-variable-names-dynamically-in-velocity – Edd

ответ

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. Я просто рад, что он работает.

+1

$ goalObject.AAA0000.name должно работать на вас ... вам не нужно явно использовать .get() для извлечения значений карты – Edd

Смежные вопросы