Heim >Backend-Entwicklung >PHP-Tutorial >Problem mit Laravel-Dienstanbietern
Meine Gedanken:
Ich habe selbst eine Tool-Klasse geschrieben. Da sie an mehreren Stellen im Projekt verwendet wird und ich sie nicht jedes Mal instanziieren möchte, möchte ich dieses Tool im Service-Container von Laravel registrieren. Aber leider gibt es einige Probleme. Ich werde den Code und meine eigenen Ideen direkt unten einfügen. ? ? Vielen Dank! ! !
Schritt eins: Registrieren Sie zuerst den Container
<code>php artisan make:provider QcloudVideoServiceProvider</code>
Der Code lautet wie folgt:
<code><?php namespace App\Providers; use App\Xiaoteng\QCVod; use Illuminate\Support\ServiceProvider; class QcloudVideoServiceProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = true; /** * Register the application services. * * @return void */ public function register() { $this->app->singleton('qcloud.vod', function ($app) { $glass = new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET')); return $glass->setRegion('gz'); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return ['qcloud.vod']; } } </code>
Schritt 2: Registrieren Sie sich für Fassaden
Erstellen Sie Foundation/Facades/QcloudFacades.php im App-Verzeichnis. Der Code lautet wie folgt:
<code><?php namespace App\Foundation\Facades; use Illuminate\Support\Facades\Facade; class QCvodFacades extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'qcloud.vod'; } }</code>
Schritt 3: Dienst registrieren
Dienstanbieter und Fassaden in config/app.php registrieren
<code>providers => [ //... App\Providers\QcloudVideoServiceProvider::class, ] aliases => [ //... 'QCvod' => App\Foundation\Facades\QCvodFacades::class, ]</code>
Schritt 4: Rufen Sie
an<code>dd(ACvod::getRegion());</code>
getRegion() ist eine Getter-Methode in der Tool-Klasse
Das Problem tritt auf:
<code>Class qcloud.vod does not exist</code>
Vielen Dank für Ihre Geduld beim Lesen! Vielen Dank!
Bitte lösen Sie es?
Meine Gedanken:
Ich habe selbst eine Tool-Klasse geschrieben. Da sie an mehreren Stellen im Projekt verwendet wird und ich sie nicht jedes Mal instanziieren möchte, möchte ich dieses Tool im Service-Container von Laravel registrieren. Aber leider gibt es einige Probleme. Ich werde den Code und meine eigenen Ideen direkt unten einfügen. ? ? Vielen Dank! ! !
Schritt eins: Registrieren Sie zuerst den Container
<code>php artisan make:provider QcloudVideoServiceProvider</code>
Der Code lautet wie folgt:
<code><?php namespace App\Providers; use App\Xiaoteng\QCVod; use Illuminate\Support\ServiceProvider; class QcloudVideoServiceProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = true; /** * Register the application services. * * @return void */ public function register() { $this->app->singleton('qcloud.vod', function ($app) { $glass = new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET')); return $glass->setRegion('gz'); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return ['qcloud.vod']; } } </code>
Schritt 2: Registrieren Sie sich für Fassaden
Erstellen Sie Foundation/Facades/QcloudFacades.php im App-Verzeichnis. Der Code lautet wie folgt:
<code><?php namespace App\Foundation\Facades; use Illuminate\Support\Facades\Facade; class QCvodFacades extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'qcloud.vod'; } }</code>
Schritt 3: Dienst registrieren
Dienstanbieter und Fassaden in config/app.php registrieren
<code>providers => [ //... App\Providers\QcloudVideoServiceProvider::class, ] aliases => [ //... 'QCvod' => App\Foundation\Facades\QCvodFacades::class, ]</code>
Schritt 4: Rufen Sie
an<code>dd(ACvod::getRegion());</code>
getRegion() ist eine Getter-Methode in der Tool-Klasse
Das Problem tritt auf:
<code>Class qcloud.vod does not exist</code>
Vielen Dank für Ihre Geduld beim Lesen! Vielen Dank!
Bitte lösen Sie es?
QcloudVideoServiceProvider
um
<code>$this->app->singleton('qcloud.vod', function ($app) { return new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET')); });</code>
Das sollte es sein.
Ich habe „Dienstleister“ und „Fassade“ noch nicht geschrieben. Ich habe das Gefühl, singleton()
ich muss hier den vollständigen Namensraum schreiben.
Wenn es sich nur um eine Werkzeugklasse handelt, beziehen Sie sich bitte auf die Laravel-Hilfsfunktion
composer dump-autoload