如何更新请求值

How Can I update Request value

我正在进行一个将成为文件管理器的个人项目,此时获取文件并将其移动到自定义目录的部分正在运行,但上传此 "dir" 到 DB 不工作,这是我的控制器的 "store" 功能。

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”,收到的消息是

"Presentation successfully exported files/000001/2019-10-09/a1c3b14192.pdf"

但在我的 table 上 Xampp 正在接收 "D:\xampp\tmp\phpBDBA.tmp"。

可能缺少信息,这是我的 Table:

您不能合并这样的请求。您可以找到打印请求的原因 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);

希望对您有所帮助。

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

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