2016-12-30 15 views
3

私はGithub APIプロジェクトにLaravelを使用しています。Laravel設定されたインスタンスロジックをどこに保存しますか?

あらかじめ設定されている一般的なGuzzleクライアントインスタンスを設定します。これは私のGuzzle要求の約90%でguzzleクライアントがaccess_tokenヘッダーとbase_uriを必要とするためです。

if (Auth::check()) { 
    $this->app->singleton(Client::class, function() { 
     // Grab the current user. 
     $user = Auth::user(); 

     $access_token = decrypt($user->access_token); 

     // Return a new configured Guzzle instance. 
     return new Client([ 
      'base_uri' => 'https://api.github.com', 
      'headers' => [ 
       'Authorization' => "token {$access_token}" 
      ] 
     ]); 
    }); 
} 

私は単に私の事前設定され、具体的なインスタンスをデフォルトがつがつ食うクライアントを上書きしています:私は、私は現在、そのカスタムミドルウェアの内側のようにそれをやっているコンテナでこれをバインドすることができます知っている

// Return a new configured guzzle client. 
return new Client([ 
    'base_uri' => 'https://api.github.com', 
    'headers' => [ 
     'Authorization' => "token {$access_token}" 
    ] 
]); 

。これは正常に動作しますが、私はに実行している問題は、私は、コントローラで次の操作を行うことができないということです。

public function __construct(Container $container) 
{ 
    $guzzle = $container->make(Client::class); 
} 

私は上記を使用している場合は、私は単に私の事前構成済みインスタンスがつがつ食うのデフォルトの実装を取得しません。 。コントローラーのコンストラクターがミドルウェアの前で実行されていて、単に設定されていないため、これを推測しています。

私はまだコントローラの他のメソッドにプロパティを共有したいと思います。どうすればこの問題を解決できますか?

+0

応答が作成された後にミドルウェアが実行されるように設計されていない限り、コントローラはミドルウェアより先に実行してはなりません。どちらの場合でも、あなたはそれをサービスプロバイダに入れなければなりません。 – user3158900

+0

@ user3158900現在ログインしているユーザーのアクセストークンで設定する必要があります。私はどのようにして 'Auth :: user()'をサービスプロバイダの中で得ることができますか? –

答えて

1

私はAPIの相互作用のための新しいクラスを作成します。コンストラクタで、あなたのguzzleオブジェクトを開始し、そのguzzleオブジェクトを使用するさまざまなapi呼び出しのためのメソッドを作成します。

+0

私はこれをやってみましょう。どこにクラスの具体的な実装をコンテナにバインドしますか?または、コンテナをスキップするだけですか? –

+0

申し訳ありませんが、あなたが何を意味しているのか、私はちょうどコンテナに精通していないのですか? –

関連する問題