Variable nom de la variable dans twig

J'ai une brindille de macro pour la création d'une zone de liste modifiable élément de formulaire, comme ceci :

{% macro select(name, label, choices, help, value) %}
<div class="control-group">
    <label class="control-label" for="{{ name }}">{{ label }}</label>
    <div class="controls">
        {% for choice in choices %}
            {% if value is not empty and value == choice.id %}
                <option value="{{ choice.id }}" selected="selected">{{ choice.code }} - {{ choice.name }}</option>
            {% else %}
                <option value="{{ choice.id }}">{{ choice.name }}</option>
            {% endif %}
        {% endfor %}
        <p class="help-block">{{ help }}</p>
    </div>
</div>
{% endmacro %}

Comme vous pouvez le voir, ce n'est pas très flexible, car je ne peux utiliser les objets avec l'id et le nom du champ comme valeur de l'option et de l'étiquette. Avant de migrer vers twig, j'utilise cette fonction PHP :

function form_select($name, $label, $choices, $keycol, $valcol, $value=null, $help=null)
{ ?>
<div class="control-group">
    <label class="control-label" for="<?php echo $name; ?>"><?php echo $label; ?></label>
    <div class="controls">
        <select name="<?php echo $name; ?>" class="span7" id="<?php echo $name; ?>">
            <?php foreach ($choices as $choice) : ?>
                <option value="<?php echo $choice->$keycol; ?>" <?php if ($choice->$keycol == $value) echo "selected"; ?>>
                    <?php echo $choice->$valcol; ?>
                </option>
            <?php endforeach; ?>
        </select>
        <p class="help-block"><?php echo $help; ?></p>
    </div>
</div>
<?php }

Avec cette fonction, je peux envoyer des objets arbitraires à la fonction et l'utiliser comme valeur de l'option et de l'étiquette en passant par le champ nom de la fonction ($keycol et $valcol) et d'y accéder via PHP de la variable nom de la variable de fonction ($choice->$keycol et $choice->$valcol).

Est-il de toute façon je peux recréer cette fonction comme une brindille macro?

OriginalL'auteur Furunomoe | 2012-04-23