在我們之前的文章(如何在Laravel 11 中新增和實作支付處理介面:硬編碼綁定)中,我們透過硬編碼PaymentProcessorInterface 之間的綁定探索了設定支付處理器的第一步以及具體的實現,例如StripePaymentProcessor。
雖然這種方法對於小型應用程式來說簡單有效,但對於更複雜的場景(您可能需要處理多個支付網關)缺乏靈活性,但透過使用接口,我們可以解耦程式碼,以便我們可以進一步擴展它,按照開閉原則,注入適當的功能:
在第二部分中,我們將深入研究上下文綁定,這是 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