En nuestra publicación anterior (Cómo agregar e implementar interfaces de procesamiento de pagos en Laravel 11: enlace codificado), exploramos el primer paso en la configuración de procesadores de pagos codificando el enlace entre PaymentProcessorInterface y una implementación específica, como StripePaymentProcessor.
Si bien este enfoque es simple y efectivo para aplicaciones pequeñas, carece de flexibilidad para escenarios más complejos en los que es posible que necesites manejar múltiples pasarelas de pago, pero al usar una interfaz, nos permitió desacoplar el código para que podamos extenderlo aún más. de acuerdo con el principio de apertura y cierre, para inyectar la funcionalidad adecuada:
En esta segunda parte, nos sumergiremos en el enlace contextual, una técnica más avanzada en el contenedor de servicios de Laravel que le permite inyectar diferentes implementaciones de una interfaz según el contexto específico. Esto es útil cuando la elección de un procesador de pagos depende del estado de la aplicación, como por ejemplo qué controlador maneja la solicitud.
El enlace contextual en Laravel permite que el contenedor de servicios inyecte diferentes implementaciones de una interfaz dependiendo de la clase o contexto que la solicite. En lugar de depender de una implementación única codificada, podemos usar enlaces contextuales para resolver diferentes procesadores de pagos según el controlador o algún otro factor contextual.
Comencemos configurando enlaces contextuales en AppServiceProvider. Vincularemos diferentes procesadores de pagos según el controlador que los solicite. Por ejemplo, StripePaymentController utilizará StripePaymentProcessor y PayPalPaymentController utilizará PayPalPaymentProcessor.
Así es como puedes hacerlo:
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); }
¿Qué está pasando aquí?
Con el enlace contextual implementado, cada controlador ahora puede tener su procesador de pagos dedicado inyectado automáticamente. Así es como puedes configurar tus controladores:
Ejemplo: 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... }
Ejemplo: Controlador de pagos de PayPal
use App\Contracts\PaymentProcessorInterface; class PayPalPaymentController extends Controller { protected $paymentProcessor; public function __construct(PaymentProcessorInterface $paymentProcessor) { $this->paymentProcessor = $paymentProcessor; } // Methods to handle PayPal-specific payments... }
En ambos ejemplos, Laravel inyecta automáticamente el procesador de pagos correcto según el contexto del controlador. Esto es gracias al enlace contextual configurado en AppServiceProvider.
El enlace contextual es particularmente útil cuando sabes qué implementación de una interfaz usar en función de clases o contextos específicos, como controladores. Ayuda a mantener su código limpio y manejable, especialmente cuando se trata de múltiples pasarelas de pago, cada una con su propio controlador.
En esta publicación, exploramos cómo implementar el enlace contextual en Laravel 11 para el procesamiento de pagos. A continuación se ofrece un resumen rápido de los beneficios de este enfoque:
En la próxima publicación, exploraremos Factory Pattern, que permite la selección dinámica de procesadores de pagos en tiempo de ejecución, lo que brinda aún más flexibilidad para aplicaciones complejas.
¡Estén atentos a la siguiente parte, donde cubriremos cómo usar fábricas para el procesamiento de pagos en Laravel 11!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3