In unserem vorherigen Beitrag (So fügen Sie Zahlungsverarbeitungsschnittstellen in Laravel 11 hinzu und implementieren sie: Fest codierte Bindung) haben wir den ersten Schritt beim Einrichten von Zahlungsabwicklern durch die Festcodierung der Bindung zwischen der PaymentProcessorInterface untersucht und eine spezifische Implementierung, wie StripePaymentProcessor.
Während dieser Ansatz für kleine Anwendungen einfach und effektiv ist, mangelt es ihm an Flexibilität für komplexere Szenarien, in denen Sie möglicherweise mehrere Zahlungsgateways verwalten müssen. Durch die Verwendung einer Schnittstelle konnten wir den Code jedoch entkoppeln, sodass wir ihn weiter erweitern können. in Übereinstimmung mit dem Öffnen-Schließen-Prinzip, um die richtige Funktionalität einzufügen:
In diesem zweiten Teil werden wir uns mit der kontextuellen Bindung befassen, einer fortgeschritteneren Technik im Service-Container von Laravel, die es Ihnen ermöglicht, verschiedene Implementierungen einer Schnittstelle basierend auf dem spezifischen Kontext einzufügen. Dies ist nützlich, wenn die Wahl eines Zahlungsabwicklers vom Anwendungsstatus abhängt, beispielsweise davon, welcher Controller die Anfrage bearbeitet.
Kontextbindung in Laravel ermöglicht es dem Servicecontainer, je nach anfordernder Klasse oder Kontext unterschiedliche Implementierungen einer Schnittstelle einzufügen. Anstatt uns auf eine einzelne, fest codierte Implementierung zu verlassen, können wir kontextbezogene Bindung verwenden, um verschiedene Zahlungsabwickler basierend auf dem Controller oder einem anderen kontextbezogenen Faktor aufzulösen.
Beginnen wir mit der Konfiguration kontextbezogener Bindungen im AppServiceProvider. Wir werden verschiedene Zahlungsabwickler binden, je nachdem, welcher Verantwortliche sie anfordert. Beispielsweise verwendet der StripePaymentController StripePaymentProcessor und der PayPalPaymentController verwendet PayPalPaymentProcessor.
So können Sie es tun:
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); }
Was passiert hier?
Mit der kontextuellen Bindung kann nun jeder Controller seinen dedizierten Zahlungsprozessor automatisch einbinden lassen. So können Sie Ihre Controller einrichten:
Beispiel: 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... }
Beispiel: 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... }
In beiden Beispielen fügt Laravel basierend auf dem Controller-Kontext automatisch den richtigen Zahlungsprozessor ein. Dies ist der im AppServiceProvider eingerichteten Kontextbindung zu verdanken.
Kontextbindung ist besonders nützlich, wenn Sie wissen, welche Implementierung einer Schnittstelle basierend auf bestimmten Klassen oder Kontexten, z. B. Controllern, verwendet werden soll. Es trägt dazu bei, dass Ihr Code sauber und verwaltbar bleibt, insbesondere wenn Sie mit mehreren Zahlungsgateways arbeiten, von denen jedes über einen eigenen Controller verfügt.
In diesem Beitrag haben wir untersucht, wie man kontextbezogene Bindung in Laravel 11 für die Zahlungsabwicklung implementiert. Hier ist eine kurze Zusammenfassung der Vorteile dieses Ansatzes:
Im nächsten Beitrag werden wir uns mit dem Factory Pattern befassen, das eine dynamische Auswahl von Zahlungsabwicklern zur Laufzeit ermöglicht und so noch mehr Flexibilität für komplexe Anwendungen bietet.
Seien Sie gespannt auf den nächsten Teil, in dem wir uns mit der Nutzung von Fabriken für die Zahlungsabwicklung in Laravel 11 befassen!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3