控制器中的构造函数如何重写为提供者?
How constructor in controller rewrite into provider?
我有这个控制器可以与 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");
}
}
如何将此构造函数重写为服务提供者?
在app/Providers/AppServiceProvider.php
中在register()
中将class绑定到服务容器:
$this->app->bind(MailChimp::class, function () {
return new MailChimp(getenv('CHIMP_KEY'));
});
现在在您的控制器中您有 2 个选项:
首先是通过app helper解决:
public function __construct()
{
$this->MailChimp = app(MailChimp::class);
}
或者使用依赖注入:
public function __construct(MailChimp $mailchimp)
{
$this->MailChimp = $mailchimp;
}
提供者@register:
不处理 'env' 并从配置中提取它(出于缓存原因)。
$this->app->bind(MailChimp::class, function ($app) {
return new MailChimp($app['config']['services']['mailchimp']['key']);
});
控制器构造函数:
public function __construct(MailChimp $mailchimp) {
$this->mailchimp = $mailchimp;
}
对于外观,您 'could try' 只需使用 Real-time Facade。
use Facades\SomeNamespace\MailChimp as MailChimp;
public function blah()
{
MailChimp::get(...);
}
我有这个控制器可以与 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");
}
}
如何将此构造函数重写为服务提供者?
在app/Providers/AppServiceProvider.php
中在register()
中将class绑定到服务容器:
$this->app->bind(MailChimp::class, function () {
return new MailChimp(getenv('CHIMP_KEY'));
});
现在在您的控制器中您有 2 个选项:
首先是通过app helper解决:
public function __construct()
{
$this->MailChimp = app(MailChimp::class);
}
或者使用依赖注入:
public function __construct(MailChimp $mailchimp)
{
$this->MailChimp = $mailchimp;
}
提供者@register:
不处理 'env' 并从配置中提取它(出于缓存原因)。
$this->app->bind(MailChimp::class, function ($app) {
return new MailChimp($app['config']['services']['mailchimp']['key']);
});
控制器构造函数:
public function __construct(MailChimp $mailchimp) {
$this->mailchimp = $mailchimp;
}
对于外观,您 'could try' 只需使用 Real-time Facade。
use Facades\SomeNamespace\MailChimp as MailChimp;
public function blah()
{
MailChimp::get(...);
}