2016-07-23 20 views
0

我有以下功能如何在Laravel 5.2中執行外部函數?

public function completeRegistration(Request $request) 
{ 
     $yy = $request->exp_year; 
     $mm = $request->exp_month; 
     $cardnum = $request->cardnum; 
     $cvc = $request->cvc; 
} 

控制器和我希望能夠做這樣的事

public function completeRegistration(Request $request) 
{ 
     $yy = $request->exp_year; 
     $mm = $request->exp_month; 
     $cardnum = $request->cardnum; 
     $cvc = $request->cvc; 

    if(billUser($cardnum, $mm, $yy, $cvc)) 
    { 
     echo "charge success"; 
    } 
    else 
    { 
     echo "uh something was wrong"; 
    } 
} 

我還有什麼選擇,因爲5.2不再具有命令和處理程序?其他控制器將需要能夠與我的支付網關的API進行交互。我需要一個與支付相關的功能列表,我可以輕鬆地將它們調用到任何控制器中。

+0

服務提供商是實現這一目標的途徑。如果跨多個不同的網站使用,請使用它們自定義作曲家包https://laravel.com/docs/master/providers –

回答

1

我認爲你需要做一個服務:

# app/Services/Payment/Payment.php 

<?php 
namespace App\Services\Payment; 

class Payment 
{ 
    public function billUser($cardnum, $mm, $yy, $cvc) 
    { 
     // Your logic here 
    } 
} 

然後,如果你想這個服務「的Laravel方式」,您將需要創建一個服務提供商整合:

# app/Services/Payment/PaymentServiceProvider.php 

<?php 
namespace App\Services\Payment; 

use Illuminate\Support\ServiceProvider; 

class PaymentServiceProvider extends ServiceProvider 
{ 
    public function register() 
    { 
     $this->app->singleton('Payment', function($app) { 
      return new Payment(); 
     }); 
    } 
} 

然後在config/app.php註冊該服務提供者:

return [ 

    ... 

    'providers' => [ 

     ... 

     App\Services\Payment\PaymentServiceProvider::class, 

     ... 

    ], 

    ... 

]; 

然後,您可以交流塞斯它在你的控制器:

<?php 
namespace App\Http\Controllers; 

public function completeRegistration(Request $request) 
{ 
    $yy = $request->exp_year; 
    $mm = $request->exp_month; 
    $cardnum = $request->cardnum; 
    $cvc = $request->cvc; 

    if(app('Payment')->billUser($cardnum, $mm, $yy, $cvc)) 
    { 
     echo "charge success"; 
    } 
    else 
    { 
     echo "uh something was wrong"; 
    } 
} 

然後,您可以更進一步,爲您的服務創建一個門面:

# app/Services/Payment/PaymentFacade.php 

<?php 
namespace App\Services\Payment; 

use Illuminate\Support\Facades\Facade; 

class PaymentFacade extends Facade 
{ 
    protected static function getFacadeAccessor() 
    { 
     return 'Payment'; 
    } 
} 

要使用它,你還需要將它註冊到你的app/config.php文件:

return [ 

    ... 

    'aliases' => [ 

     .... 

     'Payment' => App\Services\Payment\PaymentFacade::class, 
    ], 

]; 

而在你的代碼的任何地方使用它:

<?php 
namespace App\Http\Controllers; 

use Payment; 

public function completeRegistration(Request $request) 
{ 
    $yy = $request->exp_year; 
    $mm = $request->exp_month; 
    $cardnum = $request->cardnum; 
    $cvc = $request->cvc; 

    if(Payment::billUser($cardnum, $mm, $yy, $cvc)) 
    { 
     echo "charge success"; 
    } 
    else 
    { 
     echo "uh something was wrong"; 
    } 
} 

我希望這有助於!