Laravel存储库/服务模式:如何处理Auth和Gates

问题描述 投票:2回答:1

我开始在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),我相信直接使用用户模型来代替,这会违反存储库模式,不是吗?

因此,我真的需要一些建议,我应该如何解决这个问题?

任何建议和明显的帮助都非常感谢!

提前感谢!

php laravel repository-pattern
1个回答
0
投票

老兄,你怎么知道这个?我也是stcuk。

© www.soinside.com 2019 - 2024. All rights reserved.