我试图用图像文件名替换“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);
Laravel Log
有什么想法?
3条答案
按热度按时间qeeaahzv1#
你不能这么轻易地删除文件。这里的问题很复杂,但我会尝试解释。
因此,基本上每次初始化请求并尝试从中获取数据时,请求将转换所有文件并将其存储在受保护的数组中。
然后当你请求
->all()
时,它递归地合并所有纯文本输入和文件输入,所以如果你有名为pic
的纯文本输入和名为pic
的文件,文件有更高的优先级显示,而不是纯文本输入。现在肮脏的廉价解决方案:
形成新的请求与属性从原来的请求,然后您的新请求将不会有任何文件,所以你可以很容易地合并任何你需要在它。
总结一下:一旦你试图从请求中访问任何值,它将保存文件在受保护的数组中,现在没有办法删除它们。
但如果你有干净的请求,没有任何以前访问它,你可以很容易地删除它们通过写这行:
$request->files = collect();
avwztpqn2#
您也可以使用下面的simple方法:
现在你可以使用
newArray
来创建新的模型。sulc1iza3#
您也可以通过将请求数据保存在数组中并将key转换为该数组来实现此目的