Обновление без выбора изображения получить ошибку (Laravel) - PullRequest
0 голосов
/ 21 июня 2019

Прежде всего, я хотел сделать обновление для формы, и оно работает нормально, если я выбираю другое изображение.

, но если я не выбираю изображение, выдается ошибка $ 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');

это ошибка, если я не выбираю изображение enter image description here

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

Ответы [ 7 ]

1 голос
/ 21 июня 2019

Вам необходимо объявить $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);
    }
0 голосов
/ 21 июня 2019

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();
0 голосов
/ 21 июня 2019

Лучше было бы обновить столбец Изображение после того, как обновления были сделаны, также будет работать для создания нового ресурса в модели.Попробуй это.

     $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
             ]);
        }
0 голосов
/ 21 июня 2019

Заменить только:

if(isset($imageName) && $imageName !== "") {
    $post->image      = $imageName;
}
0 голосов
/ 21 июня 2019

вы можете использовать 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();
0 голосов
/ 21 июня 2019

Вы должны объявить $imageName до условия if.Например:

$imageName = ""; 
0 голосов
/ 21 июня 2019

Он перенаправляет с ошибкой, потому что не может найти переменную $ 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;
    }
...