使用 Laravel 容器存储库
Using Laravel container for repositories
我最近在使用存储库,我正在尝试解决名为 AbstractRepository
.
的主存储库中的一些默认操作或所需行为
AbstractRepository
看起来像这样:
class AbstractRepository
{
protected $session;
protected $loggedUser;
public function __construct(Session $session)
{
$this->session = $session->current();
$this->loggedUser = $session->currentUser();
}
}
在每个存储库中我希望能够使用这些属性,但是我必须在每个存储库中调用 parent::__construct()
来执行构造函数。
有什么方法可以让 laravel 的容器处理这个问题,而不是在每个存储库中调用父构造函数?
所以我可以这样做:
class CommentRepository extends AbstractRepository implements ICommentRepository
{
public function like($commentId)
{
$entry = Like::where('comment_id', $commentId)->where('user_id', $this->loggedUser->id);
}
}
如果扩展另一个(抽象)class 的 class 没有覆盖父构造函数,则将自动调用父 class 的构造函数。
所以如果你有这样的事情:
class CommentRepository extends AbstractRepository implements ICommentRepository
{
public function __construct(Session $session){
$this->foo = 'bar';
}
}
如果要调用 AbstractRespository
中的构造函数,则必须添加 parent::__construct()
。
public function __construct(Session $session){
parent::__construct($session);
$this->foo = 'bar';
}
但是,如果您的构造函数方法看起来像这样,您可以完全删除它:
public function __construct(Session $session){
parent::__construct($session);
}
我最近在使用存储库,我正在尝试解决名为 AbstractRepository
.
AbstractRepository
看起来像这样:
class AbstractRepository
{
protected $session;
protected $loggedUser;
public function __construct(Session $session)
{
$this->session = $session->current();
$this->loggedUser = $session->currentUser();
}
}
在每个存储库中我希望能够使用这些属性,但是我必须在每个存储库中调用 parent::__construct()
来执行构造函数。
有什么方法可以让 laravel 的容器处理这个问题,而不是在每个存储库中调用父构造函数?
所以我可以这样做:
class CommentRepository extends AbstractRepository implements ICommentRepository
{
public function like($commentId)
{
$entry = Like::where('comment_id', $commentId)->where('user_id', $this->loggedUser->id);
}
}
如果扩展另一个(抽象)class 的 class 没有覆盖父构造函数,则将自动调用父 class 的构造函数。
所以如果你有这样的事情:
class CommentRepository extends AbstractRepository implements ICommentRepository
{
public function __construct(Session $session){
$this->foo = 'bar';
}
}
如果要调用 AbstractRespository
中的构造函数,则必须添加 parent::__construct()
。
public function __construct(Session $session){
parent::__construct($session);
$this->foo = 'bar';
}
但是,如果您的构造函数方法看起来像这样,您可以完全删除它:
public function __construct(Session $session){
parent::__construct($session);
}