2016-07-14 9 views
0

複数のプロバイダでSMSを送信するためのインターフェイスを作成する必要があります。Laravel - インターフェイスと複数のサービス

SMSを送信できるすべての方法が含まれているSMSInterfaceを作成しました。

Nexmo:私はAbstractSMSを拡張するクラスを作成する必要があり、各SMSサービスのための今すぐ

AbstractSMS.php

<?php 

namespace ChristianGiupponi\LaravelSMS\Repositories; 

class AbstractSMS implements SMSInterface { 

    public function getBalance() 
    { 
     // TODO: Implement getBalance() method. 
    } 

    public function getName() 
    { 
     // TODO: Implement getName() method. 
    } 

    public function setApiKeys(array $keys) 
    { 
     // TODO: Implement setApiKeys() method. 
    } 

    public function to(array $numbers) 
    { 
     // TODO: Implement to() method. 
    } 

    public function from($from) 
    { 
     // TODO: Implement from() method. 
    } 

    public function text($text) 
    { 
     // TODO: Implement text() method. 
    } 

    public function send() 
    { 
     // TODO: Implement send() method. 
    } 
} 


は今、私はインターフェイスを実装する抽象クラスを作成しました.php

私はまた、設定ファイルに基づいて、クラスにインターフェイスをバインドするために、サービスプロバイダを作成している

<?php 

namespace ChristianGiupponi\LaravelSMS\Providers; 

use Illuminate\Support\ServiceProvider; 

class LaravelSMSServiceProvider extends ServiceProvider { 

    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     /** 
     * Publish config filea 
     */ 
     $this->publishes([ 
      __DIR__ . '/Config/sms.php' => config_path('sms.php'), 
     ]); 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     $this->app->call([ 
      $this, 
      'registerSMSService' 
     ]); 
    } 

    /** 
    * Register SMS Service 
    */ 
    public function registerSMSService() 
    { 
     $supportedService = config('sms.supported'); 
     $defaultService = config('sms.default'); 

     $service = (in_array($defaultService, $supportedService)) 
      // if the selected one is supported we can use it 
      ? $defaultService 
      // otherwise just use the system default 
      : 'nexmo'; 

     $service = studly_case($service); 

     // Bind the service 
     $this->app->bind('ChristianGiupponi\LaravelSMS\Repositories\AbstractSMS', "ChristianGiupponi\LaravelSMS\Repositories\\{$service}\\{$service}"); 
    } 
} 

それから私は、ファサードを作成しました:

<?php 

namespace ChristianGiupponi\LaravelSMS\Facades; 

use Illuminate\Support\Facades\Facade; 

class SMS extends Facade{ 

    /** 
    * Get the registered name of the component. 
    * 
    * @return string 
    */ 
    protected static function getFacadeAccessor() { return 'abstractsms'; } 
} 

私もプロバイダを登録しており、ファサードはapp.phpです。 routes.phpの中
私は、単純な呼び出しを追加しました:

Route::get('saldo', function(){ 
    return \ChristianGiupponi\LaravelSMS\Facades\SMS::getBalance(); 
}); 

をしかし、私は取得:Container.phpライン734で

ReflectionException: クラスabstractsmsはで

存在しません。スタックトレース:

in Container.php line 734 
at ReflectionClass->__construct('abstractsms') in Container.php line 734 
at Container->build('abstractsms', array()) in Container.php line 629 
at Container->make('abstractsms', array()) in Application.php line 697 
at Application->make('abstractsms') in Container.php line 1178 
at Container->offsetGet('abstractsms') in Facade.php line 151 
at Facade::resolveFacadeInstance('abstractsms') in Facade.php line 120 
at Facade::getFacadeRoot() in Facade.php line 207 
at Facade::__callStatic('getBalance', array()) in routes.php line 19 
at RouteServiceProvider->{closure}() 
at call_user_func_array(object(Closure), array()) in Route.php line 158 
at Route->runCallable(object(Request)) in Route.php line 137 
at Route->run(object(Request)) in Router.php line 724 
at Router->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62 
at StartSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102 
at Pipeline->then(object(Closure)) in Router.php line 726 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699 
at Router->dispatchToRoute(object(Request)) in Router.php line 675 
at Router->dispatch(object(Request)) in Kernel.php line 246 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102 
at Pipeline->then(object(Closure)) in Kernel.php line 132 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99 
at Kernel->handle(object(Request)) in index.php line 53 

どこにエラーがありますか?私は何をmissinigですか?

答えて

0

サービスプロバイダのバインディングが間違っていると思います。これで試してみてください:

public function registerSMSService() 
{ 
    ... 

    // Bind the service 
    $this->app->bind('abstractsms', "ChristianGiupponi\LaravelSMS\Repositories\\{$service}\\{$service}"); 
} 

現在Laravelはabstractsmsを解決することはできませんので、あなたがファサードからのエラーを取得していますが、それはLaravelを伝えプロバイダにabstractsmsをバインドするとき - ファサードがabstractsmsを必要とするときChristianGiupponi \ LaravelSMS \ Repositories \ {$ service} \ {$ service}の値を教えてください。

関連する問題