php - 如何在 laravel 中以编辑形式获取旧图像?代码是什么?
问题描述
//这是我的编辑表单(图像字段) 我有一个编辑表单,其中有一个图像字段,用户可以在其中上传新图像,如果他愿意。
但是,如果用户不上传新照片,我只想使用数据库中已经存在的照片。并且根本不更新图像字段。但是在我的代码中,每当我尝试不上传新的图像表单时,都不会采用旧的输入值。
<div class="form-group">
<input type="file" name="image">
</div>
//这是更新函数
public function update(Request $request, $id)
{
$this->validate($request,[
'name' => 'required',
'image' => 'mimes:jpeg,bmp,png,jpg'
]);
// get form image
$image = $request->file('image');
$slug = str_slug($request->name);
$category = Category::find($id);
if (isset($image))
{
// make unique name for image
$currentDate = Carbon::now()->toDateString();
$imagename = $slug.'-'.$currentDate.'-'.uniqid().'.'.$image->getClientOriginalExtension();
// check category dir is exists
if (!Storage::disk('public')->exists('category'))
{
Storage::disk('public')->makeDirectory('category');
}
// delete old image
if (Storage::disk('public')->exists('category/'.$category->image))
{
Storage::disk('public')->delete('category/'.$category->image);
}
// resize image for category and upload
$categoryimage = Image::make($image)->resize(1600,479)->stream();
Storage::disk('public')->put('category/'.$imagename,$categoryimage);
// check category slider dir is exists
if (!Storage::disk('public')->exists('category/slider'))
{
Storage::disk('public')->makeDirectory('category/slider');
}
// delete old slider image
if (Storage::disk('public')->exists('category/slider/'.$category->image))
{
Storage::disk('public')->delete('category/slider/'.$category->image);
}
// resize image for category slider and upload
$slider = Image::make($image)->resize(500,333)->stream();
Storage::disk('public')->put('category/slider/'.$imagename,$slider);
} else {
$imagename = $category->image;
}
$category->name = $request->name;
$category->slug = $slug;
$category->image = $imagename;
$category->save();
Toastr::success('Category Successfully Updated :)' ,'Success');
return redirect()->route('admin.category.index');
}
//当我点击编辑按钮时,它显示没有文件选择它不显示旧图像..
解决方案
您应该在 STORE 函数中更改验证
,您应该提供图像并上传(如果需要)
,但在 UPDATE 函数中,用户可能不想更改图像并且用户只想更改例如名称,所以用户可以在更新中选择无图像,
因此您在 UPDATE 中的验证必须是NULLABLE
.
$this->validate($request,[
'name' => 'required',
'image' => 'nullable|mimes:jpeg,bmp,png,jpg'
]);
推荐阅读
- audiokit - 50% 的时间启动 AudioKit 会导致 AudioHAL_Client 错误
- sql-server - 正确安装后,客户端计算机上的水晶报表登录失败
- ios - 更改/循环标签中的文本
- docker - 使用环境变量从 docker 容器上运行的 php YII 应用程序连接到 RDS mysql 数据库
- javascript - D3 堆积条形图无法看到完整的 x 轴标签
- sql - SQL:sql查询中2个地方的where子句
- android - tipsi-stripe 3d 在 react-native 上安全
- localization - 如何理解马尔可夫定位算法?
- spring - 无法连接到 Kafka 时强制 Spring Boot 应用程序失败
- javascript - 如何使用angularjs在日期amcharts之间显示