【发布时间】:2018-08-17 01:15:10
【问题描述】:
在使用可克隆的<input tpye="files" multiple> 元素时遇到了一些问题,特别是在 PHP 后端处理输入。给定以下形式:
<form method="POST" action="..." enctype="multipart/form-data">
{{ csrf_field() }}
<div class="clonable">
<input type="text" class="form-control" name="title[]"/>
<input type="file" class="form-control" name="attachments[][]" multiple/>
</div>
</form>
注意title[] 是一个数组输入,因此可以上传多个titles(在克隆.clonable 之后),并且attachments[][] 是多维的,因为每个@987654327 可以上传多个文件@div。
这里有几个场景:
单个 .clonable 上传 1 个 attachment
// $request->input("title");
array:1 [▼
0 => "Testing"
]
// $request->file("attachments");
array:1 [▼
0 => array:1 [▼
0 => UploadedFile {#27 ▶}
]
]
这是正确的上传结构;当我通过
循环输入时for($i = 0; $i < $clonableCount; $i++) {
我可以访问标题和附件
$title = $request->input("title.".$i); // "Testing"
$attachments = $request->file("attachments.".$i); // array(1)[0 => UploadedFile]
一切都应该如此。
两个 .clonable 上传,每个上传 1 个 attachment
// $request->input("title");
array:2 [▼
0 => "Testing"
1 => "Testing 2"
]
// $request->file("attachments");
array:2 [▼
0 => array:1 [▼
0 => UploadedFile {#27 ▶}
]
1 => array:1 [▼
0 => UploadedFile {#28 ▶}
]
]
再一次,一切都很好,$request->file("attachments") 的 0 和 1 都是单个 UploadedFile 的数组,因此循环有效。
单个或多个.clonable,每个attachments 多个
// $request->input("title");
array:1 [▼
0 => "Testing"
]
// $request->file("attachments");
array:2 [▼
0 => array:1 [▶]
1 => array:1 [▶]
]
这就是问题所在; $request->file("attachments") 是 2 个 arrays 的数组,每个都有 1 个 UploadedFile,所以 $request->file("attachments.".$i); 只会返回一个上传,即使有多个。这与每个.clonable 的多个attachments 进一步复杂化:
// $request->input("title");
array:2 [▼
0 => "Testing"
1 => "Testing 2"
]
// $request->file("attachments");
array:4 [▼
0 => array:1 [▶]
1 => array:1 [▶]
2 => array:1 [▶]
3 => array:1 [▶]
]
现在$request->file("attachments") 是一个由 4 个arrays 组成的数组,每个都有 1 个UploadedFile,分布在 2 个.clonable 上。
很长的问题,但基本上,我该如何处理这样的事情?我知道我可以在attachment[][] 中添加索引名称,例如attachment[0][] 和attachment[1][] 等,所以如果必须,我会这样做,但我想知道是否还有其他更优雅的解决方案。
【问题讨论】:
标签: javascript php jquery html laravel