laravelのサービスプロバイダーとは何ですか?

藏色散人
リリース: 2019-06-18 13:58:40
オリジナル
5079 人が閲覧しました

laravelのサービスプロバイダーとは何ですか?

Laravel フレームワークを使用したことがあるなら、サービス コンテナサービス プロバイダーについて聞いたことがないはずがありません。実際、これらは Lavavel フレームワークの中核であり、Larvel アプリケーションでサービスを開始するという困難なタスクを実行します。

この記事では、laravelのサービスプロバイダーとは何なのかを紹介します。

サービス プロバイダーについて学ぶ前に、サービス コンテナー について簡単に紹介します。サービス コンテナーはサービス プロバイダーで頻繁に使用されます。

つまり、Laravel サービス コンテナは、バインドされたコンポーネントを保存するために使用されるボックスであり、アプリケーションに必要なサービスも提供します。

Laravel ドキュメントでは次のように説明されています:

Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具 - Laravel 文档
ログイン後にコピー

このようにして、組み込みコンポーネントまたはサービスを注入する必要がある場合、タイプヒント関数を使用できます。コンストラクターまたはメソッド Inject で使用すると、使用時にサービス コンテナーから必要なインスタンスとその依存関係が自動的に解決されます。クールじゃないですか?この機能により、コンポーネントの手動管理から解放され、システムの結合が軽減されます。

理解を深めていただくために、簡単な例を見てみましょう。

<?php
Class SomeClass
{
    public function __construct(FooBar $foobarObject)
    {
        // use $foobarObject object
    }
}
ログイン後にコピー

ご覧のとおり、SomeClass には FooBar インスタンスが必要です。言い換えれば、他のコンポーネントに依存する必要があります。 Laravel は、サービスコンテナから適切な依存関係の注入を見つけて実行することにより、自動注入を実装します。

Laravel がどのコンポーネントまたはサービスをサービスコンテナにバインドする必要があるかをどのように認識するかを知りたい場合、その答えはサービスプロバイダーを通じて得られます。サービス プロバイダーは、コンポーネントをサービス コンテナーにバインドする作業を完了します。サービスプロバイダ内ではこの作業をサービスコンテナバインディングと呼び、バインディング処理はサービスプロバイダ側で完了します。

サービスプロバイダはサービスバインディングを実装し、registerメソッドでバインディング処理が完了します。

同時に、これにより新たな疑問が生じます:Laravel はどのサービスプロバイダーがあるかをどのようにして知るのでしょうか?これについてはまだ話し合っていないようですね?到着すると、以前は Laravel が自動的にサービスを見つけてくれると言われていたことが分かりました。友人、質問が多すぎます。Laravel は単なるフレームワークであり、スーパーヒーローではありませんね。もちろん、どのサービスプロバイダーを持っているかをLaravelフレームワークに明示的に伝える必要があります。

config/app.php 構成ファイルを見てみましょう。 Laravelアプリケーションの起動時にロードされるサービスプロバイダー設定のリストが表示されます。

&#39;providers&#39; => [
        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        Illuminate\Cache\CacheServiceProvider::class,
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
        Illuminate\Cookie\CookieServiceProvider::class,
        Illuminate\Database\DatabaseServiceProvider::class,
        Illuminate\Encryption\EncryptionServiceProvider::class,
        Illuminate\Filesystem\FilesystemServiceProvider::class,
        Illuminate\Foundation\Providers\FoundationServiceProvider::class,
        Illuminate\Hashing\HashServiceProvider::class,
        Illuminate\Mail\MailServiceProvider::class,
        Illuminate\Notifications\NotificationServiceProvider::class,
        Illuminate\Pagination\PaginationServiceProvider::class,
        Illuminate\Pipeline\PipelineServiceProvider::class,
        Illuminate\Queue\QueueServiceProvider::class,
        Illuminate\Redis\RedisServiceProvider::class,
        Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
        Illuminate\Session\SessionServiceProvider::class,
        Illuminate\Translation\TranslationServiceProvider::class,
        Illuminate\Validation\ValidationServiceProvider::class,
        Illuminate\View\ViewServiceProvider::class,
        /*
         * Package Service Providers...
         */
        Laravel\Tinker\TinkerServiceProvider::class,
        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
],
ログイン後にコピー

上記はサービス コンテナに関する基本的な概念です。

サービス プロバイダーとは

サービス コンテナーがバインディングと依存関係の注入を提供するツールである場合、サービス プロバイダーはバインディングを実装するツールです。

まず、コンテンツ プロバイダー サービスを見て、その仕組みを理解しましょう。

vender/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php ファイルを開きます。

public function register()
{
    $this->app->singleton(&#39;cache&#39;, function ($app) {
        return new CacheManager($app);
    });
    $this->app->singleton(&#39;cache.store&#39;, function ($app) {
        return $app[&#39;cache&#39;]->driver();
    });
    $this->app->singleton(&#39;memcached.connector&#39;, function () {
        return new MemcachedConnector;
    });
}
ログイン後にコピー
ここでは、サービスをサービス コンテナにバインドするために使用される register メソッドに注目する必要があります。ご覧のとおり、ここでは合計 3 つのサービス バインディング プロセス (

cachecache.storememcached.connector) が実行されます。

Laravel でキャッシュ サービスを使用する必要がある場合、サービス コンテナは CacheManager インスタンスを解決して返します。つまり、

$this->app からアクセスできる対応表のみを提供します。

サービスプロバイダーを介してサービスをバインドすることは、Laravel サービスコンテナーのバインディングサービスを開く正しい方法です。同時に、サービスプロバイダーの register メソッドを通じて、Laravel サービスコンテナがすべてのサービスをどのように管理するかを理解することも役立ちます。

config/app.php 構成ファイルからサービス プロバイダー構成リストを読み取ることで、すべてのサービスがサービス コンテナーに登録されることを前に説明しました。

以上はサービスプロバイダーの紹介です。

laravelに関連する技術的な記事については、

laravelフレームワーク紹介チュートリアルコラムをご覧ください。

以上がlaravelのサービスプロバイダーとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート