我正在研究一个项目。我在不同的路线上需要一些基本的价值观。例如显示不同页面/路线中的用户,位置,产品列表。所以我想为这些创建一个通用方法,比如我想要显示用户列表,我将为用户调用该方法并将此列表传递给view。
我尝试过以下方法:
$usersArr = User::where('loc_id',session('organization'))
->where('status', '!=', 'Deleted')
->orderBy('id', 'desc')
->lists('username', 'id');
所以我想知道哪个是定义这些类型方法的最佳位置。我应该在Model,Controller中定义它还是创建某种类型的常用函数?
答案 0 :(得分:0)
创建CommonModel,并在那里定义函数..并校准该模型
答案 1 :(得分: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