Как конструктор в контроллере переписать в провайдера?

У меня есть этот контроллер для работы с MailChimp:

class MailchimpController extends Controller
{
private $MC_API_KEY;
private $MailChimp;

public function __construct()
{
$this->CHIMP_KEY = getenv('CHIMP_KEY');
$this->MailChimp = new MailChimp($this->CHIMP_KEY);
}

public function index()
{
return $this->MailChimp->get('test');
}

public function show($test)
{
return $this->MailChimp->get("test/$test");
}
}

Как мне переписать этот конструктор для поставщика услуг?

0

Решение

Поставщик @ Регистр:

Давайте не будем иметь дело с ‘env’ и извлечем его из конфига (по причинам кэширования).

$this->app->bind(MailChimp::class, function ($app) {
return new MailChimp($app['config']['services']['mailchimp']['key']);
});

Конструктор контроллера:

public function __construct(MailChimp $mailchimp) {
$this->mailchimp = $mailchimp;
}

Для фасада вы «можете попробовать» просто использовать Фасад в реальном времени.

use Facades\SomeNamespace\MailChimp as MailChimp;

public function blah()
{
MailChimp::get(...);
}
0

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

В app/Providers/AppServiceProvider.php в register() привязать класс к сервисному контейнеру:

$this->app->bind(MailChimp::class, function () {
return new MailChimp(getenv('CHIMP_KEY'));
});

Теперь в вашем контроллере у вас есть 2 варианта:

Во-первых, чтобы решить это с помощью помощника приложения:

public function __construct()
{
$this->MailChimp = app(MailChimp::class);
}

Или используйте внедрение зависимости:

public function __construct(MailChimp $mailchimp)
{
$this->MailChimp = $mailchimp;
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector