基于用户输入的中间件上的 Laravel/Lumen 绑定接口

我对此很陌生,所以请跟我说。:)


我有两个接口的实现,我们只是命名它们BankService1,并且BankService2它们都遵循DisbursementInterface.


通常,如果我只需要一种实现,我只需将接口和实现绑定起来bootstrap/app.php,并将接口注入到控制器的构造函数中。但是,我想根据用户输入动态绑定实现,如下所示:


//if remittance is true, use bank 1 else bank 2

$disbursementService = ($request['remittance'] ? 'BankService1' : 'BankService2');


$this->app->bind('My\Namespace\DisbursementInterface', "My\Namespace\\{$disbursementService}");

我认为中间件是执行此操作的最佳位置,因为我需要该$request对象。然而,我很难绑定实现,因为就像我所说的,我对此仍然很陌生。


有什么建议么?


幕布斯6054654
浏览 71回答 1
1回答

一只斗牛犬

我想到了。我真正需要的只是创建一个服务容器!我实际上根本不需要它在中间件中。class DisbursementServiceProvider extends ServiceProvider{        public function register()    {        $this->app->singleton(DisbursementInterface::class, function($app) {            if ($this->app->request->remittance) {                return new BankService1();            }            return new BankService2();        });    }}之后,我注册了我的服务容器bootstrap/app.php,现在它可以工作了!我现在可以根据用户输入在实现之间切换:)
打开App,查看更多内容
随时随地看视频慕课网APP