私がしようとしているのは、自分のeccomerceサイトでPaypalとStripeの両方の支払いを処理することです。しかし、私はこれがどのように行われているのか分かりません。Laravelサービスプロバイダの1つの契約に複数のクラスをバインドする
これは私が持っているものです。
class BillingProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('App\Contracts\BillingInterface','App\Services\Billing\PaypalBilling');
}
}
私はPaypalだけを必要とする場合、これは正常に動作します。しかし、私はPaypalとStripeの両方が必要です。
これを実装するにはどうすればよいですか?だから私たちはタイプヒントこれを得ることができるペイパルまたはストライプ。
public function stripe(Request $request, BillingInterface $bill){// Handle stripe payment.}
public function paypal(Request $request, BillingInterface $bill){// Handle paypal payment.}
stripe()とpaypal()メソッドが同じクラスにあり、 'BillingInterface'に応じて別の依存オブジェクトを注入しようとしている場合は、' $ this-> app-> make 'PayPalClass') 'メソッド内にあり、DIは使用しません。 – TheFallen
コンテナの解像度を使用せず、インスタンスをインスタンス化して手動で渡します。 – naneri
見るべきリンク:http://stackoverflow.com/questions/31887870/laravel-service-provider-bind-multiple-classes https://laracasts.com/discuss/channels/general-discussion/multiple-services-インプリメンテーション-interface-switching-at-runtime – haakym