Задать вопрос
@naneri
PHP разработчик.

Laravel зачем переменная при __construct() контроллера?

Часто вижу в Laravel код типа такого:

public function __construct(Topic $topic)
    {
    	parent::__construct();
        $this->topic = $topic;
    }


Хотел поинтересоваться - откуда берётся переменная $topic и где она объявляется? Я просто вообще не могу понять в каком месте класс контроллера объявляется и откуда берётся переменная.

Вот ещё несколько примеров контроллеров:

public function __construct(InvoiceRepository $invoiceRepo)
  {
    $this->invoiceRepo = $invoiceRepo;
  }


public function __construct(Mailer $mailer, InvoiceRepository $invoiceRepo, ClientRepository $clientRepo, TaxRateRepository $taxRateRepo)
	{
		parent::__construct();

		$this->mailer = $mailer;
		$this->invoiceRepo = $invoiceRepo;
		$this->clientRepo = $clientRepo;
		$this->taxRateRepo = $taxRateRepo;
	}


public function __construct(AccountRepository $accountRepo, UserMailer $userMailer, ContactMailer $contactMailer)
	{
		parent::__construct();

		$this->accountRepo = $accountRepo;
		$this->userMailer = $userMailer;
		$this->contactMailer = $contactMailer;
	}
  • Вопрос задан
  • 4021 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
vanchelo
@vanchelo
Это называется DI (Dependency Injection). Она создается при создании экземпляра класса. Ларавел с помощью рефлексии находит зависимости в конструкторе класса и создает новые экземпляры, если класс объявленный в конструкторе уже находится в контейнере и объявлен как shared или singleton, то Ларавел не создает новые экземпляры, а "подсовывает" их из контейнера.

Почитайте на досуге про DI и IoC
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы