php - 我在这里需要一个 else-if 语句还是没有必要?
问题描述
此功能用于删除图像。如果尝试删除图像的用户不是图像的作者或管理员,则第一个 if 重定向回,else-if 检查用户是否具有管理员角色,如果有,则图像被删除。最后,如果用户不是管理员并且是图像的作者,那么最后一段代码也会删除图像。
现在我的问题是,我什至需要 else if 部分代码吗?如果用户既不是管理员也不是作者,我可以只有一个小的 if 语句重定向,然后删除图像,因为如果用户通过第一个 if,他肯定是管理员或作者。
public function deleteImage($imageId){
$image = Image::where('id', $imageId)->first();
if (!Auth::user()->hasRole('Admin')) {
if (Auth::user() != $image->user){
return redirect()->back();
}
} else if (Auth::user()->hasRole('Admin')) {
$imageName = $image->image_file_name;
$image->tags()->detach();
$image->delete();
Storage::delete('public/uploads/images/'.$imageName);
Storage::delete('public/uploads/images/thumbnails/'.$imageName);
Storage::delete('public/uploads/images/specificImages/'.$imageName);
Storage::delete('public/uploads/images/miniImages/'.$imageName);
$imageChildren = Image::where('parent_id', $image->id)->get();
foreach ($imageChildren as $imageChild) {
Storage::delete('public/uploads/images/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/thumbnails/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/specificImages/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/miniImages/'.$imageChild->image_file_name);
$imageChild->delete();
}
return redirect()->route('home');
}
$imageName = $image->image_file_name;
$image->tags()->detach();
$image->delete();
Storage::delete('public/uploads/images/'.$imageName);
Storage::delete('public/uploads/images/thumbnails/'.$imageName);
Storage::delete('public/uploads/images/specificImages/'.$imageName);
Storage::delete('public/uploads/images/miniImages/'.$imageName);
$imageChildren = Image::where('parent_id', $image->id)->get();
foreach ($imageChildren as $imageChild) {
Storage::delete('public/uploads/images/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/thumbnails/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/specificImages/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/miniImages/'.$imageChild->image_file_name);
$imageChild->delete();
}
return redirect()->route('home');
}
解决方案
下面应该做同样的事情。您不需要 else if,因为一旦满足第一个条件,它将始终执行相同的执行。我还连接了第一个条件以包括对作者与图像用户的检查
public function deleteImage($imageId){
$image = Image::where('id', $imageId)->first();
if (!Auth::user()->hasRole('Admin') && Auth::user() != $image->user) {
return redirect()->back();
}
$imageName = $image->image_file_name;
$image->tags()->detach();
$image->delete();
Storage::delete('public/uploads/images/'.$imageName);
Storage::delete('public/uploads/images/thumbnails/'.$imageName);
Storage::delete('public/uploads/images/specificImages/'.$imageName);
Storage::delete('public/uploads/images/miniImages/'.$imageName);
$imageChildren = Image::where('parent_id', $image->id)->get();
foreach ($imageChildren as $imageChild) {
Storage::delete('public/uploads/images/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/thumbnails/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/specificImages/'.$imageChild->image_file_name);
Storage::delete('public/uploads/images/miniImages/'.$imageChild->image_file_name);
$imageChild->delete();
}
return redirect()->route('home');
}
推荐阅读
- pandas - Group Pandas:如何在分组数据中连接或合并/加入/附加两个具有相同索引但扩展名不同的 csv 文件?
- python - 读取一堆文件并重新组织它们
- iteration - 如何在 cplex 模型中使用“CP”
- r - 运行应用程序选项未显示在窗格中,#R
- javascript - 如何使用多个 jquery 代码填充 html 输入/文本字段
- jquery - 如何通过使用 SystemJS 作为模块加载器将 jquery 与 TypeScript 一起使用(ReferenceError:jQuery 未在 Object.execute 中定义)
- firebase - Firebase 身份验证在 1 小时后过期
- c - C:为什么会出现这种分段错误?
- c++ - Konfig32.exe 中 0x6D3800C8 处未处理的异常:使用 MS Detours 后出现 0xC000041D
- angular - 过滤分页外部 api 的所有页面中的数据