为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
幕布斯6054654 2024-01-19 20:49:59
我对此很陌生,所以请跟我说。:)我有两个接口的实现,我们只是命名它们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对象。然而,我很难绑定实现,因为就像我所说的,我对此仍然很陌生。有什么建议么?
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我想到了。我真正需要的只是创建一个服务容器!我实际上根本不需要它在中间件中。


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,现在它可以工作了!我现在可以根据用户输入在实现之间切换:)


查看完整回答
反对 回复 2024-01-19
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信