我有一个表单,它根据我数据库中的实体动态生成字段(我的实体是课程)。对于每个新课程,它会添加一个表单字段来修改它的排序顺序。我的问题是,如何在我的课程表中动态显示这些单独的表单字段?
我的表格逻辑:
foreach ($entities as $id => $course) { //$id key included to show you courses key value
$formBuilder->add($course->getId(), 'text', array(
'data' => $course->getsortOrder(),
'label' => false,
'attr' => array('class' => 'sort' /*, 'style' => 'visibility:hidden;'*/ )
));
}
我的jQuery修改了表单字段:
$(document).ready(function () {
$(".records_list tbody").sortable({items: "tr"},
{stop: function(event, ui) {
$(".sort").each(function(index) {
$(this).val(index);
});
}
});
});
/* I tested the proper functionality of this jQuery by putting
<input type="text" class="sort" value="{{ entity.sortOrder }}">
into the <td> that sort order is in. I want to replace this with
something like {{ form_widget(form.{entity.id}) }} */
我可以很容易地说:
{% for entity in entities %}
<td>
{% if( entity.id == 1) %}
{{form_widget(form.1)}} //1 is entity id
{% else if (entity.id == 2 ) %}
{{form_widget(form.2)}} //2 is entity id
{% else if (entity.id == 3 ) %}
{{form_widget(form.3)}} //3 is entity id
{% endif %}
</td>
{% enfor %}
但这显然不是很有活力。你添加了一个新课程,它就会中断。
如果我能说
那就太好了{% for entity in entities %}
<td>
{% set course = entity.id %}
{{form_widget(form.course)}}
</td>
{% endfor%}
但遗憾的是,这不起作用。
对于如何将这些表单字段动态添加到我的sortOrder中的任何见解表示赞赏。
答案 0 :(得分:5)
我不确定你想要做什么。
但是,如果要动态访问对象或数组的属性,可以使用attribute Twig function。
你应该在你的模板中尝试这样的事情:
{% for entity in entities %}
<td>
{{ form_widget(attribute(form, entity.id)) }}
</td>
{% endfor%}