我正在尝试用图像文件名替换“pic”值,该值在进入时设置为数组,但合并似乎不起作用。
我在日志中没有收到以下代码的任何错误。我想我还不允许嵌入图片,所以下面有链接。我正在做一个 Laravel 项目。
Log::info($request);
$image = $request->file('pic');
$imageName = $image->getClientOriginalName();
$request->merge(array('pic' => $imageName));
$request->file('pic')->move(base_path()."/public/profile_pics",$imageName);
Log::info($request);
有什么想法吗?
最佳答案
您不能如此轻易地删除文件。这里的问题很复杂,但我会尽力解释。
所以基本上每次您初始化请求并尝试从中获取数据时,请求都会转换所有文件并将它们存储在 protected 数组中。
然后,当您请求 ->all()
时,它会递归地将所有纯文本输入与文件输入合并,因此如果您有名称为 pic
的纯文本输入和名称为 的文件>pic
,文件比纯文本输入优先显示。
现在又脏又便宜的解决方案:
$request = new Request($request->all());
$request->merge(['pic' => 'zzz']);
dd($request->all());
使用原始请求的属性形成新的请求,那么您的新请求将没有任何文件,因此您可以轻松地合并任何您需要的内容。
总而言之:一旦您尝试从请求中访问任何值,它会将文件保存在 protected 数组中,现在无法删除它们。
但是,如果您有干净的请求,之前没有任何访问权限,您可以通过编写以下行轻松删除它们:$request->files = collect();
关于php - 合并请求不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37232340/