【问题标题】:Reference a interface from a controller laravel从控制器 laravel 引用接口
【发布时间】:2017-09-21 14:35:05
【问题描述】:

我正在使用一个界面来处理不同的支付选项。

事情在我的控制器中,我得到了银行 slug,但根据那个 slug,我决定在我的情况下使用哪个类银行来处理付款。我的控制器:

public function sendPayment($request, PayBank $bank_transacton)
{

    here I want to reference the SentToBank interface and
   send payment class that I get in return from checkBankImplementation function//

    SendToBank()->sendLoanApplication($bank_transaction);
}

检查 slug 的方法,以便我知道将哪个支付服务发送到接口:

public static function checkBankImplementation($bank_slug) {

    switch ($bank_slug) {

    case "firstbank":
        return new app\FirstBank\Client();
        break;

    case "secondbank":
        return new app\SecondBank\Client();
        break;
    default:

        return null;
    }
}

我的界面:

<?php

namespace App\Banks;

interface SendToBank {

    public function sendLoanApplication($bank_transaction);

}

【问题讨论】:

  • 哪些类实现了 SendToBank 接口?
  • 另外两个类各代表一家银行,它们具有相同的方法 sendLoanApplication($bank_transaction)
  • 如果你想引用一个接口而不是一个实现,你需要bind implementation to an interface。但我不确定这对你的情况是否有意义。

标签: php laravel interface


【解决方案1】:

1- 你的app\FirstBank\Client()app\SecondBank\Client() 需要实现SendToBank 接口。

2- 从您的控制器中,您必须使用静态方法创建正确的对象。

3- 在该对象上调用sendLoanApplication 方法

类似的东西:

public function sendPayment($request, PayBank $bank_transacton)
{

    $bankClient = Class::checkBankImplementation($bank_slug); // You need to change the class name with the one actually implementing the checkBandImplementation method and extract the proper $bank_slug from the request

    $bankClient->sendLoanApplication($bank_transaction);
}

【讨论】:

  • 没有。 checkBankImplementation 是一个静态方法,因此您只需要调用它的类名,而无需使用new 创建新对象。您实际在哪个类中实现了该方法?
  • 我们需要知道你实现了上面发布的方法的类的名称
猜你喜欢
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
相关资源
最近更新 更多