Прежде всего, я хотел обновить форму, и она отлично работает, если я выбираю другое изображение.
но если я не выбираю изображение, выдает ошибку $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');
это ошибка, если я не выбираю изображение

как я могу делать обновления, не выбирая изображение?






Он перенаправляется с ошибкой, потому что не может найти переменную $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);
}else
{
$imageName = null;
}
Вы должны объявить $imageName перед условием if. Например:
$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();
да, но если вы пропустили это, то ur $imageName пуст. поэтому это пропустит сохранение изображения, если файл отсутствует.
Заменить только:
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
]);
}
оно работает! Спасибо. но это оптимизированный способ или есть другой способ достичь моей цели?
Это можно рассматривать как отказоустойчивый способ, который отлично работает с массовым назначением атрибутов, хотя он выполняет запросы дважды, но он будет работать для всех случаев, даже когда есть новая запись и вам нужно обновить изображение до записи.
Anser от @Aditya Thakur выглядит хорошо, но
если пользователь обновляет изображение
запрос на обновление будет выполняться два раза, это не обязательно
Так что попробуйте код ниже
$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);
}
если я добавлю условие else, изображение не будет найдено при отображении