Laravel 验证器/上传的文件在要求时失败

Posted

技术标签:

【中文标题】Laravel 验证器/上传的文件在要求时失败【英文标题】:Laravel Validator / Uploaded File Fails At Required 【发布时间】:2013-06-28 20:41:38 【问题描述】:

"dd" 输出 Input::all() 在 postController:

array(8) 
["_token"]=>
string(40) "6WZ87M1LCiVCsaUS9HbjZckRibXfF2RP69LCpW7K",
...
...
["svg"]=>
object(Symfony\Component\HttpFoundation\File\UploadedFile)#9 (7) 
  ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  bool(false)
  ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  string(39) "Screenshot from 2013-06-18 17:07:27.png"
  ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  string(9) "image/png"
  ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  int(29747)
  ["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  int(0)
  ["pathName":"SplFileInfo":private]=>
  string(14) "/tmp/phpdRTDU7"
  ["fileName":"SplFileInfo":private]=>
  string(9) "phpdRTDU7"


验证:

$rules = array('svg' => 'required');

$check = Validator::make(Input::except('_token'), $rules);

if($check->fails())
return Redirect::back()->withErrors($check);    
else
return Redirect::back()->with('message', 'No problem'); 

我收到错误消息:

错误信息: svg 字段是必需的。

即使我上传文件,如您在 dd 输出中看到的那样,它始终显示该错误。

谢谢,

【问题讨论】:

您是否在打开的表单中添加了文件选项? 是的,enctype=multipart/form-data。 哦,问题是使用 Input::except() 而不是 all()。我认为它不包含文件,只是输入。解决了。谢谢。 :) 【参考方案1】:

user2413500 发现问题在于使用不包含文件对象的Input::except('_token')。但是,Input::all() 确实包含文件对象。这似乎是我要报告的错误,但 Input::except 的定义是“全部”减去您不想要的项目。

但似乎正在发生的是“全部”减去你不想要的项目,减去你的文件!

Itrulia 和 Taylor 说this is not a bug。

但是,当您发布了 $_FILE 时,这些声明令人困惑地并不完全相同...

$params = Input::except('_token'); // Missing file inputs!
$params = array_except(Input::all(), '_token'); // The current solution.

保持警惕! :)

【讨论】:

以上是关于Laravel 验证器/上传的文件在要求时失败的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 验证器和 excel 文件错误

Laravel图像上载验证失败

如何 Laravel 中验证 zip 压缩包里的文件?

如何 Laravel 中验证 zip 压缩包里的文件?

Laravel - 超过 PHP 最大上传大小限制时验证文件大小

Vue.js - 当标头中使用 multipart/form-data 时,axios 中的文件上传验证失败