2012-04-23 5 views
8

У меня есть прут макрос для создания поля со списком элементов формы, как это:переменного имя переменного в веточке

{% 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 %} 

Как вы можете видеть, это не очень гибкое, потому что я могу использовать только объекты с идентификатором и полем имени как значение параметра и метка. До перехода на прут, я использую эту 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 } 

С помощью этой функции можно отправить произвольные объекты, функции и использовать его в качестве значения опции и этикетки, передавая имя поля функции ($keycol и $valcol) и доступа к ним с помощью функции имени переменной переменной PHP ($choice->$keycol и $choice->$valcol).

В любом случае, я могу воссоздать эту функцию как макрос ветви?

ответ

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