Heim > Backend-Entwicklung > PHP-Tutorial > Problem mit Laravel-Dienstanbietern

Problem mit Laravel-Dienstanbietern

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-04 09:20:32
Original
1978 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 4: Rufen Sie

an
<code>dd(ACvod::getRegion());</code>
Nach dem Login kopieren
Nach dem Login kopieren

getRegion() ist eine Getter-Methode in der Tool-Klasse

Das Problem tritt auf:

<code>Class qcloud.vod does not exist</code>
Nach dem Login kopieren
Nach dem Login kopieren

Vielen Dank für Ihre Geduld beim Lesen! Vielen Dank!

Bitte lösen Sie es?

Antwortinhalt:

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 4: Rufen Sie

an
<code>dd(ACvod::getRegion());</code>
Nach dem Login kopieren
Nach dem Login kopieren

getRegion() ist eine Getter-Methode in der Tool-Klasse

Das Problem tritt auf:

<code>Class qcloud.vod does not exist</code>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

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

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage