为了更新我的帖子表,我想添加一个验证以检查是否上传了图像。如果未上传任何图片,则上传该图片以外的所有内容,否则就意味着有一个图片并且正在更新。
我在控制器中尝试过此操作
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)
我该如何解决?
答案 0 :(得分:0)
在您的控制器中,条件if(request('photo'))
始终为真。
使用Request $request
变量来访问请求中的Retrieving Input。例如:
对于文件:$request->file('photo')
;
对于其他文本:$request->input('description');