首页 > 解决方案 > 我在这里需要一个 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');
    }

标签: phplaravel

解决方案


下面应该做同样的事情。您不需要 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');
}

推荐阅读