Использование контейнера Laravel для репозиториев

В последнее время я работаю с репозиториями и пытаюсь решить некоторые действия по умолчанию или необходимое поведение в главном репозитории с именем 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);
}
}

1

Решение

Если класс, который расширяет другой (абстрактный) класс, не переопределяет родительский конструктор, конструктор родительского класса будет вызван автоматически.

Так что, если у вас было что-то вроде этого:

class CommentRepository extends AbstractRepository implements ICommentRepository
{
public function __construct(Session $session){
$this->foo = 'bar';
}
}

Вы должны были бы добавить parent::__construct() если вы хотели конструктор в AbstractRespository быть названным.

public function __construct(Session $session){
parent::__construct($session);
$this->foo = 'bar';
}

Однако, если ваш метод конструктора выглядит так, вы можете полностью удалить его:

public function __construct(Session $session){
parent::__construct($session);
}
0

Другие решения

Других решений пока нет …