繁体   English   中英

Symfony2表单主题针对各个领域

[英]Symfony2 form theming for individual field

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

我想你会发现choice_widget_collapsed块是一个内部渲染form_widget_compound块,所以你已经设置了一个无限循环。

尝试将调试器断点添加到Symfony\\Component\\Form\\FormRenderer.php中的第250行附近,此代码位于以下位置:

$blockName = $blockNameHierarchy[$hierarchyLevel];

查看$blockName在每次迭代期间取什么值。 到达要渲染的字段后,您应该看到正在调用的块以及调用的顺序。 这可以帮助您更好地了解模板中正在发生的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM