0

我正在做一个项目。我在不同的路线上需要一些基本的价值观。例如,在不同的页面/路线中显示用户、位置、产品的列表。所以我想为这些创建一个通用方法,比如我想显示用户列表的地方,我将为用户调用该方法并将此列表传递给查看。

我尝试了以下方法:

$usersArr = User::where('loc_id',session('organization'))
  ->where('status', '!=', 'Deleted')
  ->orderBy('id', 'desc')
  ->lists('username', 'id');

所以我想知道定义这些方法的最佳位置。我应该在模型、控制器中定义它还是创建某种类型的通用函数?

4

2 回答 2

0

这是一个常见的问题。我认为最流行的方法是为此创建一个 Repository 类(例如名称为 UserRepository)。您可以像这样定义 repo 方法:

class UserRepository{

    public static function getOrganizationActiveUsers($organization){
        return User::where('loc_id', $organization)
              ->where('status', '!=', 'Deleted')
              ->orderBy('id', 'desc')
              ->lists('username', 'id');
    }

}

然后在其他类中使用此方法,例如:

$variable = UserRepository::getOrganizationActiveUsers(session('organization'));

这样,您的班级就不必知道存在某种会话。例如,如果您在访问特定 API 时无法访问会话,这将非常有用。

您也可以通过这种方式将您的存储库注入您的控制器(或任何其他类)中:

<?php 


use Namespace/SubnameSpace/UserRepository; // this is very important, to specify the correct full classname with namespace; 


class SomeController
{


    __construct(UserRepository $userRepo) 
    {
        $this->userRepo = $userRepo;
    }

    public  function showUserOrganizationUsers()
    {
        $users = $this->userRepo->getOrganizationActiveUsers(session('organization'));

        return $users;
    }

}

这也很方便,例如,如果您想注入一个完全不同的类但使用相同的方法。(如果您想深入了解依赖注入,请阅读有关接口和 Laravel DI 容器的信息,它们在注入依赖项时提供了很多便利。我上面展示的只是一种简单的方法)。

顺便说一句,你可以在这里查看一些使用不同方法的示例代码库: Awesome Laravel on GitHub

于 2016-04-28T11:22:43.810 回答
0

创建 CommonModel ,并在那里定义函数..并调用该模型

于 2016-04-28T10:45:46.277 回答