簡體   English   中英

集合形式主題symfony2

[英]collection form theming symfony2

我在symfony 2應用程序中使用以下抽象類型來編輯專輯

    public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder
      ->add('title', 'text')
      ->add('description', 'textarea')
      ->add('public', 'checkbox')
      ->add('lists', 'collection', array(
            'attr' => array('data-category' => 'access-right'),
            'type' => 'albumListType',
            'allow_add' => true,
            'allow_delete' => true,
            'by_reference'  => false,
            )
      )
      ->add('medias', 'collection', array(
            'attr' => array('data-category' => 'media'),
            'type' => new MediaType(),
            'allow_add' => true,
            'allow_delete' => true,
            'by_reference'  => false,
            )
        )
    ;
  }

當我顯示此表單時,我需要為與該文章鏈接的每種媒體顯示一個縮略圖,因此我嘗試重載mediawidget以便生成以下html

<div class="row" id="albumtype_media" data-prototype="prototype">
    <div class="col-md-3" id="albumtype_media_0">
            <img src="path"/>
            <input type="hidden" name="albymtype_media[0][path]" value="path"/>
    </div>
    <div class="col-md-3" id="albumtype_media_1">
            <img src="path"/>
            <input type="hidden" name="albymtype_media[1][path]" value="path"/>
    </div>
</div>

為了實現這一點,我使用特殊的表單主題來自定義媒體小部件

{% block _medias_widget %}
    {% spaceless %}
        {% if prototype is defined %}
            {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
        {% endif %}
        <div class="row" {{ block('widget_container_attributes') }}>
            {{ block('collection_media_rows') }}
            {{ form_rest(form) }}
        </div>
    {% endspaceless %}
{% endblock %}

{% block collection_media_rows %}
{% spaceless %}
{{ form_errors(form) }}
{% for innerform in form %}
        {% spaceless %}
             <div class="col-md-3" {{ block('widget_attributes') }}>
                {% if form.parent is empty %}
                    {{ form_errors(innerform) }}
                {% endif %}
                <img src="{{ innerform.vars.value.path }}"/>
                {% for child in innerform %}
                    {{ form_errors(child) }}
                    {{ form_label(child) }}
                    {{ form_widget(child) }}
                {% endfor %}
            </div>
        {% endspaceless %}
{% endfor %}
{% endspaceless %}
{% endblock %}

給我以下輸出

<div class="row" id="albumtype_media" data-prototype="prototype">
    <div class="col-md-3" id="albumtype_media" data-prototype="prototype">
            <img src="path"/>
            <input type="hidden" name="albymtype_media[0][path]" value="path"/>
    </div>
    <div class="col-md-3" id="albumtype_media" data-prototype="prototype">
        <div id="albumtype_media_1">
            <input type="hidden" name="albymtype_media[1][path]" value="path"/>
    </div>
</div>

當我從symfony 2開始時,我對樹枝沒有很好的理解,而查看form_widget的源代碼也無濟於事,所以如果您能向我解釋如何獲得所需的結果,我將非常感激。

您的樹枝模板是否從另一個模板繼承? 如果不是,則應注意阻止順序。 渲染時應嵌套的塊應嵌套。 您不能將一個塊定義為使用另一個塊,然后再定義第二個塊。 應該在“ _medias_widget”塊中定義“ collection_media_rows”塊...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM