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