У меня есть прут макрос для создания поля со списком элементов формы, как это:переменного имя переменного в веточке
{% 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
).
В любом случае, я могу воссоздать эту функцию как макрос ветви?