2017-09-21 1 views
0

다른 지불 옵션을 처리하기 위해 인터페이스를 사용하고 있습니다.컨트롤러에서 인터페이스 참조 laravel

내 컨트롤러에 문제가 있습니다. 은행 슬러그를 얻지 만 그 슬러그를 기반으로 결제를 처리하는 데 사용할 클래스 은행을 결정합니다. 내 컨트롤러 : 나는 인터페이스로 전송되는 결제 서비스를 알 수 있도록

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); 
} 

방법은 슬러그를 확인하려면 :

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); 

} 
+0

은 무엇 클래스입니다 SendToBank 인터페이스를 구현? – marijnz0r

+0

두 개의 다른 클래스는 각각 동일한 메소드를 가진 은행을 나타냅니다. sendLoanApplication ($ bank_transaction) –

+0

구현이 아닌 인터페이스를 참조하려면 [인터페이스에 구현을 바인딩] (https : // laravel)이 필요합니다. com/docs/5.5/container # 바인딩 - 인터페이스 - 구현). 그러나 나는 당신의 경우에 그것이 합리적이지는 않습니다. – devk

답변

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); 
} 
+0

아니요. checkBankImplementation은 정적 메서드이므로 'new'로 새 객체를 만들지 않고 클래스를 호출하기 만하면됩니다. 어떤 클래스에서 실제로이 메소드를 구현 했습니까? – gbalduzzi

+0

이미 공개로 전환했습니다 –

+0

지금 작동 했습니까, 아니면 더 도움이 필요합니까? – marijnz0r

관련 문제