У меня есть этот контроллер для работы с 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");
}
}
Как мне переписать этот конструктор для поставщика услуг?
Поставщик @ Регистр:
Давайте не будем иметь дело с ‘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(...);
}
В 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;
}