在Laravel PHP中设置控制器的正确方法

在Laravel PHP中设置控制器的正确方法,php,laravel,Php,Laravel,我不知道创建和使用控制器的正确方法是什么。让我们想象一下,我们有一个带有索引方法的控制器,用于显示数据库记录,我们有以下数据库结构: |id |名称|激活| 所以我只想在用户端显示活动记录,在管理端显示所有记录(活动和非活动)。从逻辑上讲,对于这两种操作,我们都会使用索引方法,对吗?我们应该为用户端使用索引方法,为管理员端创建另一个方法,还是反之亦然? 什么是最灵活的解决方案,以便我们可以在两个视图中使用Route::resource?首先,您必须在应用程序中实现一个角色系统,并将两个角色设置为

我不知道创建和使用控制器的正确方法是什么。让我们想象一下,我们有一个带有索引方法的控制器,用于显示数据库记录,我们有以下数据库结构:

|id |名称|激活|

所以我只想在用户端显示活动记录,在管理端显示所有记录(活动和非活动)。从逻辑上讲,对于这两种操作,我们都会使用索引方法,对吗?我们应该为用户端使用索引方法,为管理员端创建另一个方法,还是反之亦然?
什么是最灵活的解决方案,以便我们可以在两个视图中使用Route::resource?

首先,您必须在应用程序中实现一个角色系统,并将两个角色设置为admin和user。 您可以使用多种方法进行筛选,但我建议的方法有:

  • 在模型中使用作用域,如果角色是用户,则删除不活动的作用域
  • 在模型中使用trait为每个角色返回正确的数据,如trait中的两个方法:一个用于用户,另一个用于管理员
  • 这两种方法在模型级别上进行过滤,这就是我的建议,以获得高质量的软件。而且也没有一个肮脏和硬编码的解决方案。因为如果这在将来会改变,你不必跨越所有的代码,你只需编辑特定的部分

    您可以查看laravel文档以查看有关概念的详细信息


    祝您好运

    如果希望继续使用相同的方法,请仅在用户不是管理员时添加对数据库查询的限制。比如说

    $query = \App\Model::query();
    
    if( !Auth::user()->isAdmin() )
    {
        $query->where('active', true);
    }
    
    $records = $query->get();
    

    要获得更清晰的语法,可以在(/*条件*/,/*带筛选器的回调*/)时使用
    ->
    有条件地将筛选器添加到查询中。