我有:
{!! Form::open(['route'=>'admin.some.store', 'method' => 'post', 'id' => 'creation-form']) !!}
{!! Form::text('name', null, ['class' => 'form-control', 'id'=>'name']) !!}
{!! Form::text('name1', null, ['class' => 'form-control', 'id'=>'name1']) !!}
{!! Form::button('Submit', ['class' => 'btn btn-primary', 'type'=>'submit']) !!}
{!! Form::close() !!}
我需要使用带有这种形式的dropzone.js。我需要立即将我的表格和图像的所有数据提交给同一个控制器。我该怎么做。我发现了其他问题和文档,但是我遇到了一些问题(例如,当我不使用dropzone类时,预览显示没有样式。这个类不仅是自动启动插件的id,而且是样式,程序激活的重要元素等)。 Dropzone包含非文档文档。
答案 0 :(得分:2)
有很多方法可以解决这个问题。据推测,您当前的表单模型(让我们称之为Element
)与图像至少有one to many
关系,如果不是many-to-many
。
我通常通过正常处理上传来解决这个问题(因为它们会在Dropzone中删除)并将返回的ID附加到我的主表单
像往常一样创建Laravel表单:
{!! Form::open(['method' => 'POST', 'route' => ['some.route.name'], 'class' => 'myForm') !!}
// various fields...
{!! Form::close() !!}
创建Dropzone表单区域:
{!! Form::open(['route' => ['some.route.location'], 'class' => 'dropzone', 'files' => true]) !!}
{!! Form::close() !!}
然后为您的Dropzone intsance添加Javacript:
$(document).ready(function() {
Dropzone.options.myUploadForm = {
success: function(event, response) {
$('.myForm').append("<input type='hidden' name='image_ids[]' value='"+response.photo_id+"' />");
}
};
});
然后,您的主窗体正常提交您的Controller方法,此时您可以遍历image_ids
数组并将它们传递给自己的方法,该方法将它们与您的模型相关联:
public function storeSomething(Request $request)
{
$new_element = $this->element->create($request->all());
// depending on the type of relationship, you can now use the
// IDs to update your Photos
$new_element->associateWithImages($request->input('image_ids'));
}
这种方法的缺点是用户可能会上传图片但无法填写表格,在这种情况下,您最终可能会遇到一些孤儿&#39;图片。但是,这可以通过Cron作业来处理,该作业会定期删除孤立的图像。
否则,您可以尝试使用某些Dropzone配置选项一次性上传所有内容。您需要排队Dropzone中删除的图像,并在提交主表单后手动处理队列。看看here