Php 控制器中的构造函数如何重写为提供程序?
我有一个控制器与MailChimp一起工作:Php 控制器中的构造函数如何重写为提供程序?,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我有一个控制器与MailChimp一起工作: class MailchimpController extends Controller { private $MC_API_KEY; private $MailChimp; public function __construct() { $this->CHIMP_KEY = getenv('CHIMP_KEY'); $this->MailChimp = new MailC
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中:
$this->app->bind(MailChimp::class, function () {
return new MailChimp(getenv('CHIMP_KEY'));
});
现在,在控制器中有两个选项:
首先是通过app helper解决此问题:
public function __construct()
{
$this->MailChimp = app(MailChimp::class);
}
或者使用依赖项注入:
public function __construct(MailChimp $mailchimp)
{
$this->MailChimp = $mailchimp;
}
Provider@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;
}
对于立面,您可以“尝试”使用一个
但当我想在函数中使用它时,我得到:无法解决的依赖项解析[Parameter 0[$app]]在类中照亮\Support\ServiceProvider抱歉,我没有用app helper测试它,更改了用5.5测试的代码如果我理解在服务提供程序中bind MailChimp::class作为新的MailChimp…,这是真的吗?我可以在我的控制器中这样使用:MailChimp::get吗?不可以。如果你想使用MailChimp::get,你需要创建facade。服务提供程序中的MailChimp::类位于。这将返回类的字符串,例如App\Mail\MailChimp
use Facades\SomeNamespace\MailChimp as MailChimp;
public function blah()
{
MailChimp::get(...);
}