如何更新请求值

时间:2019-10-09 23:45:38

标签: php laravel laravel-6

我正处于一个个人项目的中间,该项目将成为文件管理器,目前正在执行将文件移至自定义目录的过程,但是上载此“ dir”的部分到数据库不起作用,这是我的控制器的“存储”功能。

public function store(Request $request)
{
    $request->validate([
        'path' => 'required',
        'id_class' => 'required'
    ]);

    $file = $request->path;
    $fileName = bin2hex(random_bytes(5)) . ".pdf";
    $folder = "files/" . str_pad($request['id_user'], 6, "0", STR_PAD_LEFT)
              . "/" . date("Y-m-d");
    $path = $file->storeAs(
        $folder,
        $fileName
    );
    $request = $request->merge(['path' => $path]);
    if (Presentation::create($request->all())) {
        return redirect()->route('presentation.create')
                  ->with('success', "Presentation successfully exported {$path}");
    }
}

您可以看到我正在显示“ $ path”,收到的消息是

  

“演示文稿已成功导出文件/000001/2019-10-09/a1c3b14192.pdf”

但是在Xampp上的我的表中收到“ D:\ xampp \ tmp \ phpBDBA.tmp”。

enter image description here

只是出于可能缺乏信息的原因,这是我的表格:

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以通过merge将输入合并到请求中,但是文件仍然存在于单独的源中。在这种情况下,您将为已生成的存储文件路径设置输入path,但是文件中的path var仍作为UploadedFile对象存在。 all方法以文件具有优先权的方式将文件合并到输入中。对于仅获取输入(不包括文件)的情况,可以调用input()而不是all()

Presentation::create($request->input())

答案 1 :(得分:0)

您不能合并这样的请求。您可以找到打印请求dd($request);

的原因
$request = $request->merge(['path' => $path]);

您可以尝试这样:

$requestData = collect($request->only(['path', 'id_class']));
// or 
// $requestData = collect($request->all());

$requestData = $requestData->merge(['path' => $path]);

Presentation::create($requestData);

希望这会有所帮助。