猿问

使用 Laravel 表单将多个文件上传到数据库中

我正在尝试提交一个表单,如果用户需要,可以选择上传多个文件。我不断收到错误“未定义的变量:数据”。我哪里做错了?


控制器


public function store(Request $request)

{

    $this->validate($request, [

        'title' => 'required|string|max:191',

        'description' => 'required|string',

        'date' => 'required|date|max:191',

    ]);


    if ($request->hasfile('file')) {

        foreach ($request->file('file') as $file) {

            $fileName = $file->getClientOriginalName();

            $file->move(public_path().'/files/', $fileName);

            $data[] = $fileName;

        }

    }


    return logbook::create([

        'title' => $request['title'],

        'description' => $request['description'],

        'date' => $request['date'],

        'file' => json_encode($data),

        'student_id_FK' => session('userID'),

    ]);

}


梦里花落0921
浏览 188回答 2
2回答

富国沪深

$request->file('file')正在引用file表单数据(即单个文件上传),因此foreach永远不会执行该块。这$data就是未定义的原因。你应该处理多个文件foreach ($request->allFiles() as $file) {...}

浮云间

问题是$data只有在$data[] =实际执行该行时才会创建变量。看起来情况并非如此。因此,如果没有文件,只需在添加之前定义数组即可使其工作。$data = [];// ...$data[] = ...此外,还有在一个错字hasFile方法:if($request->hasfile('file'))应该if($request->hasFile('file'))注意大小写变化。
随时随地看视频慕课网APP
我要回答