如果在Laravel和VueJs应用程序中未添加图像,如何更新记录

时间:2018-06-27 16:04:54

标签: laravel vue.js

为了更新我的帖子表,我想添加一个验证以检查是否上传了图像。如果未上传任何图片,则上传该图片以外的所有内容,否则就意味着有一个图片并且正在更新。

我在控制器中尝试过此操作

cancel

在我的Vue文件中,我具有以下内容:

public function update(Request $request, $id)
{
    if(request('photo')){
        $exploded = explode(',', request('photo'));
        $decoded = base64_decode($exploded[1]);
        if(str_contains($exploded[0], 'jpeg'))
            $extension = 'jpg';
        else
            $extension = 'png';   

        $fileName = str_random().'.'.$extension;
        $path = public_path().'/'.$fileName;
        file_put_contents($path, $decoded);
        $post = Post::findOrFail($id);
        $post->title = request('title');
        $post->description = request('description');
        $post->category_id = request('category_id');
        $post->user_id = Auth::id();
        $post->photo = $fileName;
        $post->save();
    }
    else{
        $post = Post::findOrFail($id);
        $post->title = request('title');
        $post->description = request('description');
        $post->category_id = request('category_id');
        $post->user_id = Auth::id();
        $post->save();         
    }

    return response()->json([
        'post' => $post,
    ], 200);
}

当我尝试更新帖子时,如果未插入图片,则会出现500内部服务器错误:

editPost(){
  if(this.update_post.photo == ''){
    axios.put('/api/posts/' + this.update_post.id, {
      title: this.update_post.title,
      description: this.update_post.description,
      category_id: this.update_post.category_id
    })
    .then(response => {
        alert('updated');
        this.showPosts();
    })
    .catch(function(error){
      console.log(error);
    });            
  }
  else{
    axios.put('/api/posts/' + this.update_post.id, {
      title: this.update_post.title,
      description: this.update_post.description,
      category_id: this.update_post.category_id,
      photo: this.update_post.photo
    })
    .then(response => {
        alert('updated');
        this.showPosts();
    })
    .catch(function(error){
      console.log(error);
    });             
  }
}

以下是我在错误日志中看到的一些错误:

app.js:14233 PUT http://myblog.local/api/posts/52 500 (Internal Server Error)

我该如何解决?

1 个答案:

答案 0 :(得分:0)

在您的控制器中,条件if(request('photo'))始终为真。

使用Request $request变量来访问请求中的Retrieving Input。例如:

对于文件:$request->file('photo');

对于其他文本:$request->input('description');