2016-07-23 7 views
0

Ich habe einen Controller mit der folgenden FunktionWie führe ich eine externe Funktion in Laravel 5.2 aus?

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

und ich möchte in der Lage sein, so etwas wie dieses

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

zu tun Was sind meine Optionen seit 5.2 nicht mehr Befehle und Handlers hat? Andere Controller müssen in der Lage sein, mit der API meines Payment-Gateways zu interagieren. Ich benötige eine Liste zahlungsbezogener Funktionen, die ich einfach in einen beliebigen Controller eingeben kann.

+0

Dienstleister sind der Weg dafür. Wenn sie auf vielen verschiedenen Websites verwendet werden, erstellen Sie ein benutzerdefiniertes Composer-Paket mit ihnen https://laravel.com/docs/master/providers –

Antwort

1

Ich denke, dass Sie einen Service vornehmen müssen:

# app/Services/Payment/Payment.php 

<?php 
namespace App\Services\Payment; 

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

Dann, wenn Sie diesen Service "die Laravel Art und Weise" integrieren möchten, müssen Sie einen Service-Provider erstellen müssen:

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

dann dieses Service Provider registrieren in config/app.php:

return [ 

    ... 

    'providers' => [ 

     ... 

     App\Services\Payment\PaymentServiceProvider::class, 

     ... 

    ], 

    ... 

]; 

können Sie dann ac cess es in Ihrem Controller:

<?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"; 
    } 
} 

Sie dann weiter gehen und eine Fassade für Ihren Dienst erstellen:

# 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'; 
    } 
} 

Um es zu nutzen, müssen Sie auch in Ihre app/config.php-Datei registrieren:

return [ 

    ... 

    'aliases' => [ 

     .... 

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

]; 

Und es überall in Ihrem Code verwenden:

<?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"; 
    } 
} 

Ich hoffe, das hilft!

Verwandte Themen