不选择图像更新会出错 (Laravel)
Update without selecting Image get an Error (Laravel)
首先我想更新一个表单,如果我 select 另一个图像就可以正常工作。
但如果我没有 select 图片,它会给出 $imageName 错误
$request->validate([
'type' => 'required',
'title' => 'required',
'body' => 'required',
'excerpt' => 'required',
'tag' => 'required',
'metas' => 'required',
'ispublished' => 'required',
]);
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('images'), $imageName);
}
$post = post::find($id);
$post->type = $request->get('type');
$post->slug = str_slug($request->get('title'));
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->excerpt = $request->get('excerpt');
$post->tag = $request->get('tag');
$post->image = $imageName;
$post->metas = $request->get('metas');
$post->ispublished = $request->get('ispublished');
$post->published_at = $request->get('published_at');
$post->save();
return redirect()->route('post.index')->with('success','Post updated successfully');
如果我没有 select 图片,这就是错误
如何在没有图像的情况下进行更新?select
它正在重定向并出现错误,因为当用户没有 select 图像时它找不到 $imageName 变量。即使用户没有 select 图像,您也可以分配变量。
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('images'), $imageName);
}else
{
$imageName = null;
}
您应该在 if
条件之前声明 $imageName
。例如:
$imageName = "";
您可以使用 if 来检查文件是否存在,如果文件存在则更新。
$post = post::find($id);
$post->type = $request->get('type');
$post->slug = str_slug($request->get('title'));
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->excerpt = $request->get('excerpt');
$post->tag = $request->get('tag');
if ($request->hasFile('image'))
{
$post->image = $imageName;
}
$post->metas = $request->get('metas');
$post->ispublished = $request->get('ispublished');
$post->published_at = $request->get('published_at');
$post->save();
仅替换:
if(isset($imageName) && $imageName !== "") {
$post->image = $imageName;
}
最好更新图像列,更新完成后,也可以在模型中创建新资源。
试试这个。
$post = post::find($id);
$post->type = $request->get('type');
$post->slug = str_slug($request->get('title'));
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->excerpt = $request->get('excerpt');
$post->tag = $request->get('tag');
$post->metas = $request->get('metas');
$post->ispublished = $request->get('ispublished');
$post->published_at = $request->get('published_at');
$post->save();
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('images'), $imageName);
$update = Post::where('id', $id)->update([
'image' => $imageName
]);
}
@Aditya Thakur 的 Anser 看起来不错,但
如果用户正在更新图像
更新查询将运行两次它不是必需的
所以试试下面的代码
$post = post::find($id);
$imageName = $post->image;
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$uplodedObject = $request->file('image');
$imageName = md5(time()).'.' .$uplodedObject->getClientOriginalExtension();
$uplodedObject->move(public_path('images'), $imageName);
}
$post->type = $request->get('type');
$post->slug = str_slug($request->get('title'));
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->excerpt = $request->get('excerpt');
$post->tag = $request->get('tag');
$post->image = $imageName;
$post->metas = $request->get('metas');
$post->ispublished = $request->get('ispublished');
$post->published_at = $request->get('published_at');
$post->save();
您需要声明 $imageName
变量。
$imageName = "";
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('images'), $imageName);
}
首先我想更新一个表单,如果我 select 另一个图像就可以正常工作。
但如果我没有 select 图片,它会给出 $imageName 错误
$request->validate([
'type' => 'required',
'title' => 'required',
'body' => 'required',
'excerpt' => 'required',
'tag' => 'required',
'metas' => 'required',
'ispublished' => 'required',
]);
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('images'), $imageName);
}
$post = post::find($id);
$post->type = $request->get('type');
$post->slug = str_slug($request->get('title'));
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->excerpt = $request->get('excerpt');
$post->tag = $request->get('tag');
$post->image = $imageName;
$post->metas = $request->get('metas');
$post->ispublished = $request->get('ispublished');
$post->published_at = $request->get('published_at');
$post->save();
return redirect()->route('post.index')->with('success','Post updated successfully');
如果我没有 select 图片,这就是错误
如何在没有图像的情况下进行更新?select
它正在重定向并出现错误,因为当用户没有 select 图像时它找不到 $imageName 变量。即使用户没有 select 图像,您也可以分配变量。
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('images'), $imageName);
}else
{
$imageName = null;
}
您应该在 if
条件之前声明 $imageName
。例如:
$imageName = "";
您可以使用 if 来检查文件是否存在,如果文件存在则更新。
$post = post::find($id);
$post->type = $request->get('type');
$post->slug = str_slug($request->get('title'));
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->excerpt = $request->get('excerpt');
$post->tag = $request->get('tag');
if ($request->hasFile('image'))
{
$post->image = $imageName;
}
$post->metas = $request->get('metas');
$post->ispublished = $request->get('ispublished');
$post->published_at = $request->get('published_at');
$post->save();
仅替换:
if(isset($imageName) && $imageName !== "") {
$post->image = $imageName;
}
最好更新图像列,更新完成后,也可以在模型中创建新资源。 试试这个。
$post = post::find($id);
$post->type = $request->get('type');
$post->slug = str_slug($request->get('title'));
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->excerpt = $request->get('excerpt');
$post->tag = $request->get('tag');
$post->metas = $request->get('metas');
$post->ispublished = $request->get('ispublished');
$post->published_at = $request->get('published_at');
$post->save();
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('images'), $imageName);
$update = Post::where('id', $id)->update([
'image' => $imageName
]);
}
@Aditya Thakur 的 Anser 看起来不错,但
如果用户正在更新图像
更新查询将运行两次它不是必需的
所以试试下面的代码
$post = post::find($id);
$imageName = $post->image;
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$uplodedObject = $request->file('image');
$imageName = md5(time()).'.' .$uplodedObject->getClientOriginalExtension();
$uplodedObject->move(public_path('images'), $imageName);
}
$post->type = $request->get('type');
$post->slug = str_slug($request->get('title'));
$post->title = $request->get('title');
$post->body = $request->get('body');
$post->excerpt = $request->get('excerpt');
$post->tag = $request->get('tag');
$post->image = $imageName;
$post->metas = $request->get('metas');
$post->ispublished = $request->get('ispublished');
$post->published_at = $request->get('published_at');
$post->save();
您需要声明 $imageName
变量。
$imageName = "";
if ($request->hasFile('image'))
{
request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('images'), $imageName);
}