我开始在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应用程序,因此,大多数请求都需要进行身份验证。我使用Laravel Passport的OAuth2.0。
在切换到存储库/服务或所谓的模式之前,我先使用了Gates和Policies,然后再将请求传递给控制器方法。而且很明显,用户身份验证会传递到我认为不合适的每个策略方法(来自Passport),我相信直接使用用户模型来代替,这会违反存储库模式,不是吗?
因此,我真的需要一些建议,我应该如何解决这个问题?
任何建议和明显的帮助都非常感谢!
提前感谢!
老兄,你怎么知道这个?我也是stcuk。