我使用https://github.com/Anahkiasen/former中的前一个生成器工具生成了一个多上传表单。
{{ Former::files('file')->accept('image')->required(); }}
导致
<input multiple="true" accept="image/*" required="true" id="file[]" type="file" name="file[]">
在我提交表单后,我发现Input::hasFile('file')
总是在Input:has('file') returns true
时返回false。
到目前为止我一直在尝试:
日志::信息(输入::文件( '文件')); &lt; - empty
foreach(Input::file('file') as $file) <-- Invalid argument supplied for foreach()
Log::info("test");
if(Input::has('file'))
{
if(is_array(Input::get('file')))
foreach ( Input::get('file') as $file)
{
Log::info($file); <-- returns the filename
$validator = Validator::make( array('file' => $file), array('file' => 'required|image'));
if($validator->fails()) {
...
}
}
}
当然,验证器始终失败,因为Input :: get('file')不返回文件对象。如何修改我的代码以捕获提交的文件?
答案 0 :(得分:3)
感谢您的帮助,Kestutis的回答表明了这一点。在Laravel中定义文件表单的常用方法是
echo Form::open(array('url' => 'foo/bar', 'files' => true))
此选项使用enctype =&#39; multipart / form-data&#39;设置正确的加密类型。
使用laravel表单构建器&#34;前&#34;你必须用
打开表格Former::open_for_files()
之后你可以用通用的方式验证表格。
if(Input::hasFile('files')) {
Log::info(Input::File('files'));
$rules = array(
...
);
if(!array(Input::File('files')))
$rules["files"] = 'required|image';
else
for($i=0;$i<count(Input::File('files'));$i++) {
$rules["files.$i"] = 'required|image';
}
$validation = Validator::make(Input::all(), $rules);
if ($validation->fails())
{
return ...
}
else {
// everything is ok ...
}