Symfony2形成个别领域的主题

时间:2015-06-11 19:07:51

标签: php forms symfony

我正在使用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>

1 个答案:

答案 0 :(得分:1)

我认为您会发现choice_widget_collapsed块在form_widget_compound块内呈现,因此您设置了无限循环。

尝试在此代码所在的位置250附近的Symfony\Component\Form\FormRenderer.php添加一个调试器断点:

$blockName = $blockNameHierarchy[$hierarchyLevel];

查看每次迭代期间$blockName的值。一旦你到达现场,你试图渲染你应该看到正在调用哪些块以及以哪种顺序。这可能有助于您更好地了解模板中发生的情况。