Ich muss eine Schnittstelle erstellen, um SMS mit mehreren Anbietern zu senden.Laravel - Schnittstelle und mehrere Dienste
Ich habe eine SMSInterface
erstellen, die alle verfügbaren Methoden zum Senden von SMS enthält.
Jetzt habe ich eine abstrakte Klasse erstellt, die die Schnittstellen implementiert:
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.
}
}
nun eine Klasse für jede SMS Service, den ich schaffen haben, die AbstractSMS
erweitert:
Nexmo .php
<?php
namespace ChristianGiupponi\LaravelSMS\Repositories\Nexmo;
use ChristianGiupponi\LaravelSMS\Repositories\AbstractSMS;
class Nexmo extends AbstractSMS {
public function getBalance(){
return "22";
}
}
ich haben auch eine Service-Provider die Schnittstelle der Klasse basierend auf der Konfigurationsdatei zu binden:
<?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}");
}
}
Dann habe ich die Fassade erstellt haben:
<?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'; }
}
melde ich mich auch den Provider und die facada in app.php
.
In routes.php habe ich einen einfachen Anruf:
Route::get('saldo', function(){
return \ChristianGiupponi\LaravelSMS\Facades\SMS::getBalance();
});
Aber ich bekomme:
Reflection in Container.php Linie 734: Klasse abstractsms nicht
existiert mit die Stapelspur:
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
Wo ist der Fehler? Was vermisse ich?