我正在尝试更换' pic' value,当它进来时设置为数组,带有图像文件名但合并似乎不起作用。
我没有在日志中使用以下代码获得任何错误。我想我不允许嵌入图片,所以下面有链接。我正在做一个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);
任何想法?
答案 0 :(得分:7)
你无法轻易摆脱文件。这里的问题很复杂,但我会尝试解释。
所以基本上每次初始化请求并尝试从中获取数据时,请求都会转换所有文件并将它们存储在受保护的数组中。
然后,当您请求->all()
时,它会递归合并所有普通输入和文件输入,因此如果您使用名称为pic
的纯文本输入和名称为pic
的文件,则文件具有更高的优先级显示,而不是纯文本输入。
现在又脏又便宜的解决方案:
$request = new Request($request->all());
$request->merge(['pic' => 'zzz']);
dd($request->all());
使用原始请求中的属性形成新请求,然后您的新请求将没有任何文件,因此您可以轻松地合并您需要的任何内容。
总而言之:一旦您尝试从请求中访问任何值,它将保存受保护数组中的文件,并且现在无法将其删除。
但是,如果您有干净的请求,之前没有任何访问权限,您可以通过写下以下内容轻松删除它们:$request->files = collect();
答案 1 :(得分:0)
您还可以使用以下简单方法:
$image = $request->file('pic');
$imageName = $image->getClientOriginalName();
$newArray = array_merge($request->except('pic'), ['pic' => $imageName]);
$request->file('pic')->move(base_path()."/public/profile_pics",$imageName);
Log::info($$newArray); //You have all the inputs except 'pic'
现在您可以使用newArray
来创建新模型。