2017-11-01 5 views
0

私は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"); 
    } 
} 

どのように私は、サービスプロバイダに、このコンストラクタを書き換えるのですか?コンテナにサービスを提供するregister()バインドクラスのapp/Providers/AppServiceProvider.php

答えて

0

プロバイダ@登録:

'env'を処理せずに(キャッシュの理由で)configから取得します。

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

コントローラのコンストラクタ:あなただけReal-time Facadeを使用するように '試みることができる' ファサード用

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

use Facades\SomeNamespace\MailChimp as MailChimp; 

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

まずアプリのヘルパーを経由して、それを解決することです:

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

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

は、今すぐあなたのコントローラであなたは2つのオプションを持っています依存性注入を使用する:

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

しかし、私は機能でそれを使用したい - 私が取得:解決できない依存関係が解消私はアプリヘルパーでそれをテストしていない[パラメータ#0 [ $アプリ]]クラスを照らし\サポート\のServiceProviderで – wuhe

+0

申し訳ありませんが、変更されたコード(5.5でテスト済み) – Bostjan

+0

サービスプロバイダのバインド "MailChimp :: class"を "新しいMailchimp ..."と理解していれば、それは本当ですか?そして、私は私のコントローラでこのように使用することができます: "MailChimp :: get()"? – wuhe

関連する問題