【问题标题】:Laravel Dropzone Invalid ArgumentLaravel Dropzone 无效参数
【发布时间】:2014-10-24 12:07:47
【问题描述】:

当我通过 dropzone.js 发布包含图像的表单时,我的控制器中出现无效参数。我将参数名称设置为文件,它在没有 dropzone 的情况下工作。我无法弄清楚为什么在使用 dropzone 时出现无效参数错误。谁能帮忙?

脚本

  <script>

            Dropzone.options.dropkicks = { 
              autoProcessQueue: false,
              uploadMultiple: true,
              parallelUploads: 100,
              paramName: "files",
              maxFiles: 100

            }
            var myDropzone = new Dropzone("div#dropkicks", { url: "item-create-post"});

</script>

控制器

foreach(Input::file('files') as $file) {

            $filename = time(). $file->getClientOriginalName();

            $uploadflag = $file->move('uploads', $filename);

            if($uploadflag) {
                $uploadedfiles[] = $filename;

                $item_image = ItemImage::create(
                    array(
                        'item_id'   => $item->id,
                        'image'     => $filename
                    )
                );
            }

        } 

拖放区

            <div class="dropzone" id="dropkicks"></div>

【问题讨论】:

  • 你能发布完整的错误信息吗?
  • 没有足够的声誉来发布图像:( ErrorException (E_UNKNOWN) 为 foreach() 提供的参数无效
  • 所以你有一个围绕#dropkicks div 的表单,你可以在图像文件旁边提交其他信息?
  • 是的,一些基本的输入字段。

标签: laravel laravel-4 dropzone.js


【解决方案1】:

除非您弄乱了dropzone.js 的源代码,否则没有简单的方法可以做到这一点。那是因为该插件旨在用于异步上传文件。不过,通过对 dropzone.js 进行一些更改,您可以让它工作(我假设您使用的是 latest version)。

找到这一行:

document.body.appendChild(_this.hiddenFileInput);

并将其替换为:

_this.hiddenFileInput.setAttribute("name", "files[]");
_this.element.appendChild(_this.hiddenFileInput);

也找到这一行:

return setupHiddenFileInput();

并注释掉:

// return setupHiddenFileInput();

您的表单应该如下所示:

<!-- Make sure you add enctype="multipart/form-data" to the form tag -->
<form action="/item-create-post" method="post" enctype="multipart/form-data">
    <!-- some form fields... -->
    <div class="dropzone" id="dropkicks"></div>
    <!-- maybe some more form fields... -->
    <button type="submit">Submit Form</button>
</form>

您的脚本部分也应如下所示:

Dropzone.options.dropkicks = { 
    autoProcessQueue: false,
    uploadMultiple: true,
    parallelUploads: 100,
    paramName: "files",
    maxFiles: 100,
    // This URL is not really used in your case but it's needed
    // because the plugin won't attach itself without one specified
    url: '#'
}

同时从您的脚本中删除这一行,因为它不是必需的。 dropzone 将自动附加到任何具有“dropzone”类的元素:

var myDropzone = new Dropzone("div#dropkicks", { url: "item-create-post"});

【讨论】:

    【解决方案2】:

    将脚本放在包含主要 dropzone.js 的正下方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      相关资源
      最近更新 更多