在编辑表单中未选择图像文件时如何使用当前图像更新配置文件?我正在使用 Laravel 8
How to update profile with current image when an image file is not chosen in the edit form? I am using Laravel 8
每当我尝试在编辑表单中仅保存配置文件描述和 url 的配置文件更改时,我都会收到错误消息,因为我也没有选择图像文件。
当在编辑表单中未选择图像文件时,我希望能够使用当前图像更新配置文件。
我不断收到的错误是:
在 null
上调用成员函数 store()
...该错误指的是我的 UserController 更新方法中的这一行:
$imagePath = request('image')->store('uploads', 'public');
这是我的 UserController 中的整个更新方法:
public function update(User $user, Request $request)
{
$data = request()->validate([
'description' => 'nullable',
'url' => 'nullable',
'image' => 'nullable',
]);
$imagePath = request('image')->store('uploads', 'public');
auth()->user()->profile()->update([
'description' => $data['description'],
'url' => $data['url'],
'image' => $imagePath,
]);
return redirect('/users/' . auth()->user()->id);
}
最后,这是我编辑的表格-profile.blade.php 文件:
@section('content')
<body class="home_body">
<div class="home_container_div">
<div class="home_container">
<div class="home_box_div">
<form action="{{('/users/' . auth()->user()->id)}}" enctype="multipart/form-data" method="post">
@csrf
@method('PATCH')
<div class="form-group">
<label for="description" class="edit_description_label">Description</label>
<div class="edit_description_div">
<input id="description"
type="text"
class="form-control @error('description') is-invalid @enderror"
name="description"
value="{{ old('description' ) ?? auth()->user()->profile->description }}"
autocomplete="description" autofocus>
@error('description')
<div class="invalid-feedback-div">
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
</div>
@enderror
</div>
</div>
<div class="form-group">
<label for="url" class="edit_title_label">URL</label>
<div class="edit_url_div">
<input id="url"
type="text"
class="form-control @error('url') is-invalid @enderror"
name="url"
value="{{ old('url' ) ?? auth()->user()->profile->url }}"
autocomplete="url" autofocus>
@error('url')
<div class="invalid-feedback-div">
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
</div>
@enderror
</div>
</div>
<div class="create_post_image_div">
<label for="image" class="create_image_label">Profile Image</label>
<input type="file" class="form-control-file" id="image" name="image">
@error('image')
<div class="invalid-feedback-div">
<strong>{{ $message }}</strong>
</div>
@enderror
<div class="create_post_btn_div">
<button class="create_post_btn">Save Profile</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
@endsection
我该如何解决这个问题?
如果用户没有选择任何图片文件,可以跳过图片上传部分,像这样:
public function update(User $user, Request $request)
{
$data = request()->validate([
'description' => 'required',
'url' => 'required',
'image' => 'nullable',
]);
$updateData = [
'description' => $data['description'],
'url' => $data['url'],
];
if (request('image')) {
$imagePath = request('image')->store('uploads', 'public');
$updateData['image'] = $imagePath;
}
auth()->user()->profile()->update($updateData);
return redirect('/users/' . auth()->user()->id);
}
每当我尝试在编辑表单中仅保存配置文件描述和 url 的配置文件更改时,我都会收到错误消息,因为我也没有选择图像文件。
当在编辑表单中未选择图像文件时,我希望能够使用当前图像更新配置文件。
我不断收到的错误是: 在 null
上调用成员函数 store()...该错误指的是我的 UserController 更新方法中的这一行:
$imagePath = request('image')->store('uploads', 'public');
这是我的 UserController 中的整个更新方法:
public function update(User $user, Request $request)
{
$data = request()->validate([
'description' => 'nullable',
'url' => 'nullable',
'image' => 'nullable',
]);
$imagePath = request('image')->store('uploads', 'public');
auth()->user()->profile()->update([
'description' => $data['description'],
'url' => $data['url'],
'image' => $imagePath,
]);
return redirect('/users/' . auth()->user()->id);
}
最后,这是我编辑的表格-profile.blade.php 文件:
@section('content')
<body class="home_body">
<div class="home_container_div">
<div class="home_container">
<div class="home_box_div">
<form action="{{('/users/' . auth()->user()->id)}}" enctype="multipart/form-data" method="post">
@csrf
@method('PATCH')
<div class="form-group">
<label for="description" class="edit_description_label">Description</label>
<div class="edit_description_div">
<input id="description"
type="text"
class="form-control @error('description') is-invalid @enderror"
name="description"
value="{{ old('description' ) ?? auth()->user()->profile->description }}"
autocomplete="description" autofocus>
@error('description')
<div class="invalid-feedback-div">
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
</div>
@enderror
</div>
</div>
<div class="form-group">
<label for="url" class="edit_title_label">URL</label>
<div class="edit_url_div">
<input id="url"
type="text"
class="form-control @error('url') is-invalid @enderror"
name="url"
value="{{ old('url' ) ?? auth()->user()->profile->url }}"
autocomplete="url" autofocus>
@error('url')
<div class="invalid-feedback-div">
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
</div>
@enderror
</div>
</div>
<div class="create_post_image_div">
<label for="image" class="create_image_label">Profile Image</label>
<input type="file" class="form-control-file" id="image" name="image">
@error('image')
<div class="invalid-feedback-div">
<strong>{{ $message }}</strong>
</div>
@enderror
<div class="create_post_btn_div">
<button class="create_post_btn">Save Profile</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
@endsection
我该如何解决这个问题?
如果用户没有选择任何图片文件,可以跳过图片上传部分,像这样:
public function update(User $user, Request $request)
{
$data = request()->validate([
'description' => 'required',
'url' => 'required',
'image' => 'nullable',
]);
$updateData = [
'description' => $data['description'],
'url' => $data['url'],
];
if (request('image')) {
$imagePath = request('image')->store('uploads', 'public');
$updateData['image'] = $imagePath;
}
auth()->user()->profile()->update($updateData);
return redirect('/users/' . auth()->user()->id);
}