合并请求无效

时间:2016-05-14 22:00:48

标签: php laravel http request

我正在尝试更换' 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);

Laravel Log

任何想法?

2 个答案:

答案 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来创建新模型。