@naneri
PHP разработчик.

Где подвязать реализацию класса в Laravel?

Часто вижу в проектах вот такую Dependency Injection.

public function __construct(AccountRepository $accountRepo, UserMailer $userMailer, ContactMailer $contactMailer)
    {
        parent::__construct();
        $this->accountRepo = $accountRepo;
        $this->userMailer = $userMailer;
        $this->contactMailer = $contactMailer;
    }


Я понимаю что переменные у функции должны быть реализациями классов - которые написаны перед ними. А сами переменные откуда берутся? Вроде надо сделать app::bind()? Или как? Я что-то совсем не понял.
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 2
Создаёте класс AccountRepository. И в данном классе пишите use, указывая полный путь до файла класса:

use app\Repositories\AccountRepository;
...
class SomeUsefullClassWithConstructorDI {
    public function __construct(AccountRepository $accountRepo, UserMailer $userMailer, ContactMailer $contactMailer)
    {
        parent::__construct();
        $this->accountRepo = $accountRepo;
        $this->userMailer = $userMailer;
        $this->contactMailer = $contactMailer;
    }


DI его и заюзает...
Ответ написан
AmdY
@AmdY
PHP и прочие вебштучки
Верно, это app::bind, только лучше навешивать интерфейс, а уже для app::bind прописывать конкретную реализацию на этот контракт. Соотвественно, чтобы приготовить такой объект нужно юзать app::make, в контроллер резолвится само.

Есть ещё биндинг моделей
/edit/{user}
для такого биндинг нужно использовать Route::model
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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