使用邮递员在 Laravel 5.5 中的 null 上调用成员函数 store()

Call to a member function store() on null in Laravel 5.5 using postman

我正在使用 Postman 测试文件上传,但我总是收到此错误。我已经尝试在邮递员请求字段 "multipart/form-data" 的 headers 中添加和删除,但没有结果。

Postman screenshot

我的代码:

public function update(Request $request, $id) {
    $validator = Validator::make($request->all(), [
        'name' => 'string|max:255',
        'second_name' => 'string|max:255',
        'description' => 'string|max:255',
        'gender' =>  'string|max:255',
        'admin' =>  'boolean',
        'birthday'  => 'string|max:255',
        'email' => 'string|email|max:255|unique:users',
        'password' => 'min:6|required_with:password_confirmation|same:password_confirmation',
        'file' => 'file',
    ]);

    if ($validator->fails()) {
        return response()->json(['error' => $validator->errors()], 401);
    }

    $user = User::find($id);
    $user->name = $request->input('name');
    $user->second_name = $request->input('second_name');
    $user->description = $request->input('description');
    $user->gender = $request->input('gender');
    $user->admin = $request->input('admin');
    $user->birthday = $request->input('birthday');
    $user->email = $request->input('email');
    $user->imageUrl = $request->file('file')->store('images');

    if($user->save()) {
        return new $user;
    }
}

您收到错误消息,因为您的请求中没有正确设置文件。

由于 $request->file('file') 返回 null,而您正试图对 null 调用方法,导致出现异常。

当使用 Postman 向 Laravel 发出 PUT 或 PATCH 请求时,必须采取与通常略有不同的方法。

由于 Laravel 处理 PUT 和 PATCH 请求的方式,您需要在 Postman 中将请求作为 POST 请求发送,并提供 _methodPUT 在 header 中。这就是 Laravel 所期望的。

如果这是必填字段,我还建议将文件的验证规则更改为以下内容:

'file' => 'file|required'

这将使您的 API 故障排除更加容易。如果在请求中未检测到文件,将提供 JSON 错误响应。