Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 控制器中的构造函数如何重写为提供程序?_Php_Laravel_Laravel 5.4 - Fatal编程技术网

Php 控制器中的构造函数如何重写为提供程序?

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

我有一个控制器与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中:

$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(...);
}