Я начинаю использовать шаблон репозитория и сервиса для моего проекта laravel.
Просто вкратце, я использую хранилище в качестве картографа данных и сервиса, чтобы помочь контролерам выполнять свою основную работу - получать запросы и отправлять ответы, и, следовательно, быть более тонкими.
Следующий пример кода должен дать вам некоторое представление о приведенном выше объяснении:
// App\Repositories\Eloquent\UsersRepository
class UsersRepository implements UsersRepoInterface {
protected $model;
public function __construct (Model $model) {
$this->model = $model;
}
public function all() : Collection {
//
}
public function find($id) : Model {
//
}
// and all other methods ...
}
// App\Services\UserService
class UserService {
protected $repo;
public function __construct (UsersRepoInterface $user_repo) {
$this->repo = $user;
}
/**
* @param array $data
* @return User
* @throws Exception
*/
public function create(array $data) : User {
// All business logics to create a user data
return $user;
}
// and all other methods ...
}
// App\Http\Controllers\UserController
class UserController extends Controller {
private $user;
public function __construct (UserService $user) {
$this->user = $user;
}
public function create (Request $request) : Response {
$user = $this->user->create($request->all());
return response(['user' => $user]);
}
}
Кроме того, мой проект является внутренним API-приложением, поэтому для выполнения большинства запросов необходима аутентификация. Я использую OAuth2.0 из Laravel Passport.
Вопрос
Прежде чем я переключился на репозиторий / службу или шаблон, который вы назвали, я использовал Gates и Policies до того, как запросы были переданы в методы контроллера. И очевидно, что User Auth передается каждому методу политики, который я не считаю правильным как Auth (который из Passport), я полагаю, что вместо этого использую Модель пользователя напрямую, что является нарушением для шаблона хранилища, не так ли?
Поэтому мне очень нужен совет, как мне справиться с решением такой проблемы?
Любые предложения и помощь, безусловно, приветствуются!
Заранее спасибо!