使用Laravel从Dropzone传递一些id

时间:2017-12-08 02:40:16

标签: laravel laravel-5 dropzone.js

我有一个Modal将图像上传到图库中:

<div id="imagesModal" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title"></h4>
            </div>
            <div class="modal-body">
            <form name="imagesForm" id="addImages" class="form-horizontal dropzone" role="form" method="POST" action="{{ route('images.add') }}" enctype="multipart/form-data">
                {{ csrf_field() }}
                {{ method_field('POST') }}
            </form>
            </div>
        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

这是我的jquery脚本:

$( "#addImages" ).click(function(event) {
                event.preventDefault();
                save_method = 'add';
                $('input[name=_method]').val('POST');
                $('#imagesModal').modal("show");
                $('#imagesForm')[0].reset();
                $('.modal-title').text('Add Images')
            });

            Dropzone.options.addImages = {
                paramName: "images", // The name that will be used to transfer the file
                maxFilesize: 2, // MB
            };

and i already add the route and the function

   public function store(Request $request)
    {
        $gallery = Gallery::find($request->id);
        $path = 'public'.'/'.str_slug($gallery->name);

        foreach ($request->images as $file) {
            $image = new Image();
            $image->gallery_id = $gallery->id;
            $image->name = $file->getClientOriginalName();
            $image->extension = $file->extension();
            $image->size = $file->getClientSize();
            $image->save();

            // Or any custom name as the third argument
            Storage::putFileAs($path, $file, $file->getClientOriginalName());
        }

    }

我的问题是我不知道如何通过画廊ID,所以我可以访问它的功能?我有一些想法将它放在按钮中的data-gallery-id上,但是如何传递这些数据以便与图像一起发送?

3 个答案:

答案 0 :(得分:0)

我认为我们不能发送图像对象。但你可以这样做。您可以创建一个隐藏的输入类型,以在您的表单中存储图像库ID: 提交表单后,您可以在控制器中获得$ request-&gt; id。

答案 1 :(得分:0)

根据他们的Documentation

  

params:可以是传输到服务器的其他参数的对象,也可以是使用文件xhr调用的函数,如果它是一个分块上传,则是块参数。在函数的情况下,这需要返回一个映射。   默认实现对普通上传没有任何作用,但为分块上传添加了相关信息。

因此您可以将dropzone配置修改为

Dropzone.options.addImages = {
    paramName: "images", // The name that will be used to transfer the file
    maxFilesize: 2, // MB

    // Whether to send multiple files in one request. 
    // If this it set to true, then the fallback file input element will 
    // have the multiple attribute as well.
    uploadMultiple: TRUE,

    params: {
        'gallery_id' : 1 // Your gallery Id
    }
};

这与在表单元素中添加隐藏输入字段相同。

答案 2 :(得分:0)

您可以使用在发送每个文件之前调用的 dropzone 事件方法,此方法有 3 个参数文件:用于将发送的文件,用于数据传输的 xhr,以及将包含您的数据的 formData

在您的情况下,您必须这样做:

Dropzone.on('sending', function(file, xhr, formData){
formData.append('gallery_id',  put_here_your_id )

}

并且在 Laravel 控制器中你可以读取你的 id :

$request->galery_id