我正在使用Symfony2表单构建器构建表单并使用bootstrap_3_horizontal_layout.html.twig
主题(这是我所有表单的默认设置),但我需要自定义特定字段content_owner
的布局。它是multiple select
,因此我使用下面的代码覆盖默认模板:
{% block choice_widget_collapsed %}
<div class="col-md-4"><div class="form-group">{{- block('form_widget_compound') -}}</div> </div>
{% endblock %}
和new.html.twig(表单呈现):
{% for name, child in form.content if name != 'graphics' %}
{{ form_row(child) }}
{% endfor %}
{{ form_widget(form.content.content_owner) }}
我得到的输出(在萤火虫中):
<div class="form-group">
<label for="form_content_content_owner" class="col-sm-2 control-label">Content owner</label>
<div class="col-sm-10">
<div class="col-md-4">
<div class="form-group">
<div id="form_content_content_owner">
<!--and it is blank. no choice widget-->
</div>
</div>
</div>
</div>
</div>
代码中断了我的所有choice widgets
,即没有select
可见。
我究竟做错了什么?
期望的输出:
<div class="col-sm-4">
<div class="form-group">
<label for="form_content_content_owner" class="col-sm-2 control-label">Content owner</label>
<div class="col-sm-10">
<select class="form-control" name="form[content][content_owner]" id="form_content_content_owner">
<option value=""></option>
<option value="1">Anupam</option>
<!--option value goes on-->
<option value="31">World Com</option>
</select>
</div>
</div>
</div>
答案 0 :(得分:1)
我认为您会发现choice_widget_collapsed
块在form_widget_compound
块内呈现,因此您设置了无限循环。
尝试在此代码所在的位置250附近的Symfony\Component\Form\FormRenderer.php
添加一个调试器断点:
$blockName = $blockNameHierarchy[$hierarchyLevel];
查看每次迭代期间$blockName
的值。一旦你到达现场,你试图渲染你应该看到正在调用哪些块以及以哪种顺序。这可能有助于您更好地了解模板中发生的情况。