自symfony的数据原型编辑表单

问题描述 投票:0回答:1

我知道这是一个常见的问题,但我无法弄清楚如何实现这一目标。

我有一个课程实体和CourseDocument实体。

Course(id, documents, ...) 
CourseDocument(id, file, course)

在我的课程形式:

class CourseType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title', TextType::class, [
                'label' => 'course.title',
            ])            
            ->add('documents', CollectionType::class, array(
                'entry_type' => MediaType::class,
                'label' => 'course.documents_list',
                'entry_options' => array(
                    'label' => false,
                    'data_class' => CourseDocument::class,
                ),
                'allow_add' => true,
                'allow_delete' => true,
                'by_reference' => false,
            ))
        ;
    }

在窗体我希望能够为我想添加尽可能多的文件。我设置了一切,包括JavaScript的。我唯一的问题是数据的原型是不是我想要的。

{% import "macros/prototype.html.twig" as prototype %}

{{ form_start(form) }}
    <div class="row">
        <div class="col-md-6">
            <fieldset class="form-group">
                {{ form_label(form.documents) }}
                <div id="course_documents" class="collection_holder" data-prototype="{{ prototype.tagCollectionItem(form.documents.vars.prototype)|e }}">
                    {% for widget in form.documents %}
                        {{ prototype.tagCollectionItem(widget) }}
                    {% endfor %}
                </div>
                <button type="button" id="add-document-btn" data-target-collection="#{{ form.documents.vars.id }}" class="btn btn-sm btn-info"><i class="la la-plus"></i> {{ 'course.buttons.add_document' | trans({}, 'labels') }}</button>
            </fieldset>
        </div>
    </div>
{{ form_end(form) }}

我生成我的原型宏:

{% macro tagCollectionItem(item) %}
<fieldset class="form-group">
    <div id="{{ item.vars.id }}">
        <div class="custom-file">
            {{ form_widget(item.uploadedFile) }}
            {{ form_label(item.uploadedFile, item.uploadedFile.vars.label, {'label_attr': {'class': 'custom-file-label'}}) }}
        </div>
    </div>
</fieldset>
{% endmacro %}

它的工作非常好,除了编辑。我不想输入,如果我已经选择了一个文件。但我想要的文件的名称。

symfony
1个回答
0
投票

我终于用一个宏。

{% macro tagCollectionItem(item) %}
<fieldset class="form-group">
    <div id="{{ item.vars.id }}">
    {% if item.uploadedFile.vars.file_url or item.uploadedFile.vars.image_url %}
        {{ form_errors(item.uploadedFile) }}
        {{ form_widget(item.uploadedFile, {'attr': {'hidden': true}}) }}
    {% else %}
        <div class="custom-file">
            {{ form_widget(item.uploadedFile) }}
            {{ form_label(item.uploadedFile, item.uploadedFile.vars.label, {'label_attr': {'class': 'custom-file-label'}}) }}
        </div>
    {% endif %}
    </div>
</fieldset>
{% endmacro %}

该窗体的树枝文件

<fieldset class="form-group">
            {{ form_label(form.documents) }}
            <div id="course_documents" class="collection_holder" data-prototype="{{ prototype.tagCollectionItem(form.documents.vars.prototype)|e }}">
                {% for widget in form.documents.children %}
                    {{ prototype.tagCollectionItem(widget) }}
                {% endfor %}
            </div>
            <button type="button" id="add-document-btn" data-target-collection="#{{ form.documents.vars.id }}" class="btn btn-sm btn-info"><i class="la la-plus"></i> {{ 'course.buttons.add_document' | trans({}, 'labels') }}</button>
        </fieldset>
© www.soinside.com 2019 - 2024. All rights reserved.