Forms 如果违反约束,则删除表单中的文件

Forms 如果违反约束,则删除表单中的文件,forms,symfony,Forms,Symfony,我按照教程管理多个文件的上传 上传多个文件的系统工作正常 我添加了一个约束,只允许某些类型的文件,并设置了最大大小 启用此约束后,上载的文件仍存在于表单中,但实际上已被删除 javascript代码始终将文件显示为当前文件,而实际上这些文件已不存在: 删除文件的按钮仍然存在。。 您知道如何在显示错误消息时,在违反约束的情况下完全删除表单文件吗?或者,您是否有更好的方法在Symfony 4中上载多个受约束的文件 我的树枝: {%extends'@Ticketing/base.html.twig%

我按照教程管理多个文件的上传

上传多个文件的系统工作正常

我添加了一个约束,只允许某些类型的文件,并设置了最大大小

启用此约束后,上载的文件仍存在于表单中,但实际上已被删除

javascript代码始终将文件显示为当前文件,而实际上这些文件已不存在:

删除文件的按钮仍然存在。。 您知道如何在显示错误消息时,在违反约束的情况下完全删除表单文件吗?或者,您是否有更好的方法在Symfony 4中上载多个受约束的文件

我的树枝:
{%extends'@Ticketing/base.html.twig%}
{%block title%}{{'New Ticket'| trans({},'TicketingBundle')}}{%endblock%}
{%block header%}{{'newticket'| trans({},'TicketingBundle')}}{%endblock%}
{%block form_group_class-%}
col-sm-8
{%-endblock form_group_class%}
{%block main%}
{%form_主题表单'bootstrap_4_layout.html.twig'\u self%}
{{“创建新票证”{trans({},'TicketingBundle')}
{%form_主题表单'bootstrap_3_horizontal_layout.html.twig'\u self%}
{{form_start(form,{'attr':{'class':'form horizontal'}}}}
皮耶斯·乔恩特
{%set pos=0%}
{form.documents%中的文档为%s}
{{doc.vars.value.name}
{{form_widget(doc)}
{%set pos=pos+1%}
{%endfor%}
{{‘提交票证’| trans({},'TicketingBundle')}
{{form_end(form)}}
var fileCount='{form.documents | length}}}';
var removeButton=“”;
函数移除文件(ob)
{
ob.parent().parent().remove();
}
函数createAddFile(fileCount)
{
//抓取原型模板
var newWidget=$(“#filesProto”).attr('data-prototype');
//替换原型的id和名称中使用的“_名称”
newWidget=newWidget.replace(/\u\u name\u\u/g,fileCount);
newWidget=“”+newWidget+”;
hideStuff=“”;
hideStuff+=“”;
hideStuff+=移除按钮;
hideStuff+=“”;
hideStuff+=“”;
hideStuff+=“”;
hideStuff+=“”;
hideStuff+=“”;
hideStuff+=“{{'Pièce joint'| trans}}”;
hideStuff+=“”;
hideStuff+=“”;
$(“#文件盒”).append(“+hideStuff+newWidget+”);
//单击=>模拟文件行为
$(“#jsBtnUpload”+fileCount).on('click',函数(e){
$(“#ticket_form_documents”+fileCount+“_file”).trigger('click');
});
//添加文件后
$(“#票证"表格"文档"+文件计数+“"文件”)。在('change',function()上{
//显示其名称
文件名=$(this).prop('files')[0]。名称;
$(“#jsPreview”+文件计数).append(文件名);
//隐藏“添加文件”按钮
$(“#jsBtnUpload”+fileCount).hide();
//显示“删除文件”按钮
$(“#jsRemove”+fileCount).show();
//创建“添加文件”按钮和“公司”的另一个实例
createAddFile(parseInt(fileCount)+1);
});
}
$(文档).ready(函数(){
createAddFile(fileCount);
fileCount++;
});
{%endblock%}

代码在这里可用:

一个banale解决方案是调整输出,只过滤掉没有值的文档

                {% for doc in form.documents %}
                    {% if doc.vars.value %} {### <-- new 1/2 ###}
                    <div class="row">
                        <div class="col col-xs-1" id="jsRemove{{ pos }}" style="">
                            <button type="button" class="btn btn-danger" onclick="removeFile($(this));"><i class="fa fa-times" aria-hidden="true"></i></button>
                        </div>
                        <div class="col col-xs-11" id="jsPreview{{ pos }}">{{ doc.vars.value.name }}</div>

                        <div style="display:none">
                            {{ form_widget(doc) }}
                        </div>
                    </div>

                    {% set pos = pos + 1 %}
                    {% endif %}  {### <-- new 2/2 ###}
                {% endfor %}
                {% for doc in form.documents %}
                    {% if doc.vars.value %} {### <-- new 1/2 ###}
                    <div class="row">
                        <div class="col col-xs-1" id="jsRemove{{ pos }}" style="">
                            <button type="button" class="btn btn-danger" onclick="removeFile($(this));"><i class="fa fa-times" aria-hidden="true"></i></button>
                        </div>
                        <div class="col col-xs-11" id="jsPreview{{ pos }}">{{ doc.vars.value.name }}</div>

                        <div style="display:none">
                            {{ form_widget(doc) }}
                        </div>
                    </div>

                    {% set pos = pos + 1 %}
                    {% endif %}  {### <-- new 2/2 ###}
                {% endfor %}
{% for doc in form.documents|filter(doc => doc.vars.value) %}