前回の投稿(Laravel 11 で決済処理インターフェイスを追加および実装する方法: ハードコードされたバインディング) では、PaymentProcessorInterface 間のバインディングをハードコーディングすることで決済プロセッサを設定する最初のステップを検討しました。 StripePaymentProcessor などの特定の実装。
このアプローチは小規模なアプリケーションにはシンプルで効果的ですが、複数の支払いゲートウェイを処理する必要があるより複雑なシナリオには柔軟性に欠けますが、インターフェイスを使用することでコードを分離できるため、コードをさらに拡張できます。オープンクローズ原則に従って、適切な機能を注入します:
この第 2 部では、特定のコンテキストに基づいてインターフェイスのさまざまな実装を挿入できる、Laravel のサービス コンテナのより高度なテクニックであるコンテキスト バインディングについて詳しく説明します。これは、どのコントローラがリクエストを処理しているかなど、支払いプロセッサの選択がアプリケーションの状態に依存する場合に便利です。
Laravel のコンテキスト バインディングにより、サービス コンテナは、それを要求するクラスまたはコンテキストに応じて、インターフェイスのさまざまな実装を挿入できます。単一のハードコードされた実装に依存する代わりに、コンテキスト バインディングを使用して、コントローラーまたはその他のコンテキスト要因に基づいてさまざまな支払いプロセッサを解決できます。
まず、AppServiceProvider でコンテキスト バインディングを構成しましょう。リクエストしているコントローラーに基づいて、さまざまな決済プロセッサーをバインドします。たとえば、StripePaymentController は StripePaymentProcessor を使用し、PayPalPaymentController は PayPalPaymentProcessor を使用します。
その方法は次のとおりです:
use App\Contracts\PaymentProcessorInterface; use App\Services\StripePaymentProcessor; use App\Services\PayPalPaymentProcessor; public function register() { $this->app->when(StripePaymentController::class) ->needs(PaymentProcessorInterface::class) ->give(StripePaymentProcessor::class); $this->app->when(PayPalPaymentController::class) ->needs(PaymentProcessorInterface::class) ->give(PayPalPaymentProcessor::class); }
ここで何が起こっているのですか?
コンテキスト バインディングを設定すると、各コントローラーに専用の支払いプロセッサを自動的に挿入できるようになります。コントローラーを設定する方法は次のとおりです:
例: StripePaymentController
use App\Contracts\PaymentProcessorInterface; class StripePaymentController extends Controller { protected $paymentProcessor; public function __construct(PaymentProcessorInterface $paymentProcessor) { $this->paymentProcessor = $paymentProcessor; } // Methods to handle Stripe-specific payments... }
例: PayPalPaymentController
use App\Contracts\PaymentProcessorInterface; class PayPalPaymentController extends Controller { protected $paymentProcessor; public function __construct(PaymentProcessorInterface $paymentProcessor) { $this->paymentProcessor = $paymentProcessor; } // Methods to handle PayPal-specific payments... }
どちらの例でも、Laravel はコントローラーのコンテキストに基づいて正しい支払いプロセッサを自動的に挿入します。これは、AppServiceProvider.
で設定されたコンテキスト バインディングのおかげです。コンテキスト バインディングは、コントローラーなどの特定のクラスまたはコンテキストに基づいて使用するインターフェイスの実装がわかっている場合に特に役立ちます。これは、特にそれぞれに独自のコントローラーを持つ複数の支払いゲートウェイを扱う場合に、コードをクリーンで管理しやすく保つのに役立ちます。
この投稿では、Laravel 11 で支払い処理のためにコンテキスト バインディングを実装する方法を検討しました。このアプローチの利点を簡単にまとめます:
次の投稿では、実行時に決済プロセッサを動的に選択できるようにして、複雑なアプリケーションにさらなる柔軟性を提供するファクトリー パターンについて説明します。
次のパートでは、Laravel 11 での支払い処理にファクトリーを使用する方法について説明しますので、お楽しみに!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3