创建Symfony2表单主题 - 字段集和列表样式

问题描述:

我正在使用symfony2。我试图覆盖树枝中的默认div样式表单块。创建Symfony2表单主题 - 字段集和列表样式

首先,是否有或已知可用的fieldset和list(ul - > li)方法的实现?

http://symfony.com/doc/2.0/cookbook/form/form_customization.html

我不知道的thoose一个实施的,但欢迎你让他们打开一个pull请求。

默认情况下,Twig在渲染窗体时使用div布局。但是,您可以在表格布局中渲染窗体。使用form_table_layout.html.twig资源使用这样的布局:

# app/config/config.yml 

twig: 
    form: 
     resources: ['form_table_layout.html.twig'] 

就目前而言,我实现了这样的字段集支持:

在类型

public function buildView(FormView $view, FormInterface $form, array $options) 
{ 
    $view->setAttribute('fieldsets', 
      array(
       array(
        'legend' => 'film.group.date', 
        'content'=> array(
         'theaters_release_date', 
         'storage_media_release', 
         'storage_media_release_date', 
         'vod_release_date' 
         )), 
       array(
        'legend' => 'film.group.country', 
        'content'=> array('countries')), 
        )); 
} 

我有一个模板名为fieldset.html.twig,它使用视图的属性:

{% macro fieldset_block(fieldset, form) %} 
<fieldset{% if fieldset.subform is defined %} class="{{ fieldset.subform }}"{% endif %}> 
    <legend>{{fieldset.legend | trans }}</legend> 
    {% if fieldset.content is defined%} 
     {% for row in fieldset.content %} 
      {{ form_row(form[row]) }} 
     {% endfor %} 
    {% endif %} 
    {% if fieldset.subform is defined %} 
     {# Couldn't get some recursivity (simply call form widget) here... too bad #} 
     {% if form[fieldset.subform].get('attr').fieldsets is defined %} 
      {% for subfieldset in form[fieldset.subform].get('attr').fieldsets %} 
       {{ _self.fieldset_block(subfieldset, form[fieldset.subform]) }} 
      {% endfor %} 
     {% else %} 
      {% for row in form[fieldset.subform] %} 
       {{ form_row(row) }} 
      {% endfor %} 
     {% endif %} 
    {% endif %} 
    {% if fieldset.items is defined%} 
     {% for fieldset in fieldset.items %} 
      {{ _self.fieldset_block(fieldset, form) }} 
     {% endfor %} 
    {% endif %} 
</fieldset> 
{% endmacro %} 

{% block form_widget %} 
    {% for fieldset in form.get('attr').fieldsets %} 
     {{ _self.fieldset_block(fieldset, form) }} 
    {% endfor %} 
{% endblock %} 

这里是一个简单的le fieldset示例: https://gist.github.com/spcmky/8512371

要用列表替换div,请查看form_widget_compound和form_rows。您可以:

{% block fieldset_widget %} 
    {% spaceless %} 
     <fieldset {{ block('widget_container_attributes') }}> 
      {% if title is defined %}<legend>{{ title }}</legend>{% endif %} 
       <ul> 
       {% for child in form %} 
        <li> 
         {{ form_widget(child) }} 
        </li> 
       {% endfor %} 
       </ul> 
     </fieldset> 
    {% endspaceless %} 
{% endblock %}