Maison  >  Article  >  cadre php  >  Quel est le fournisseur de services de Laravel ?

Quel est le fournisseur de services de Laravel ?

藏色散人
藏色散人original
2019-06-18 13:56:385061parcourir

Quel est le fournisseur de services de Laravel ?

Si vous avez utilisé le framework Laravel, alors il est impossible que vous n'ayez pas entendu parler du Service Container et du Service Provider. En fait, ils constituent le cœur du framework Lavavel et effectuent la tâche difficile de démarrer des services dans les applications Lavavel.

Dans cet article, nous vous présenterons Qu'est-ce que le fournisseur de services de Laravel ?

Avant d'en savoir plus sur les fournisseurs de services, présentons brièvement les conteneurs de services qui seront fréquemment utilisés dans les fournisseurs de services.

En bref, le conteneur de services Laravel est une boîte utilisée pour stocker les composants liés et fournit également les services requis par l'application.

La documentation de Laravel le décrit comme suit :

Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具 - Laravel 文档

De cette façon, lorsque nous avons besoin d'injecter un composant ou un service intégré, nous pouvons utiliser l'indice de type fonction dans le constructeur ou la méthode Inject, puis résolvez automatiquement les instances requises et leurs dépendances à partir du conteneur de service lorsqu'elles sont utilisées ! N'est-ce pas cool ? Cette fonctionnalité nous libère de la gestion manuelle des composants, réduisant ainsi le couplage système.

Regardons un exemple simple pour approfondir notre compréhension.

<?php
Class SomeClass
{
    public function __construct(FooBar $foobarObject)
    {
        // use $foobarObject object
    }
}

Comme vous pouvez le voir, SomeClass nécessite une instance FooBar. En d’autres termes, cela doit dépendre d’autres composants. L'implémentation de l'injection automatique par Laravel nécessite de trouver et d'exécuter l'injection des dépendances appropriées à partir du conteneur de service.

Si vous voulez savoir comment Laravel sait quel composant ou service doit être lié au conteneur de services, la réponse passe par les fournisseurs de services. Les fournisseurs de services effectuent le travail de liaison des composants aux conteneurs de services. Au sein du fournisseur de services, ce travail est appelé liaison de conteneur de services et le traitement de liaison est effectué par le fournisseur de services.

Le fournisseur de services implémente la liaison de service et le traitement de liaison est complété par la méthode d'enregistrement.

En même temps, cela introduira une nouvelle question : comment Laravel sait-il quels sont les fournisseurs de services ? Il semble que nous n’en ayons pas encore discuté, n’est-ce pas ? En arrivant, j’ai vu qu’il était dit auparavant que Laravel trouverait automatiquement le service ! Ami, vous avez trop de questions : Laravel n'est qu'un framework, ce n'est pas un super-héros, n'est-ce pas ? Bien sûr, nous devons indiquer explicitement au framework Laravel de quels fournisseurs de services nous disposons.

Jetons un coup d'œil au config/app.php fichier de configuration. Vous trouverez une liste des configurations de fournisseurs de services chargées lors du démarrage de l'application 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,
],

Ce qui précède sont les concepts de base sur les conteneurs de services.

Qu'est-ce qu'un fournisseur de services ?

Si le conteneur de services est un outil qui fournit une liaison et une injection de dépendances, alors un fournisseur de services est un outil qui implémente la liaison.

Examinons d'abord un service de fournisseur de contenu pour comprendre son fonctionnement. Ouvrez le fichier 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;
    });
}

Ici, nous devons nous concentrer sur la méthode register, qui est utilisée pour lier le service au conteneur de service. Comme vous pouvez le voir, un total de trois processus de liaison de service sont effectués ici : cache, cache.store et memcached.connector.

Ensuite, lorsque nous aurons besoin d'utiliser le service de cache dans Laravel, le conteneur de service résoudra l'instance CacheManager et la renverra. Autrement dit, nous mettons simplement à disposition une table de correspondance accessible depuis $this->app .

La liaison de services via des fournisseurs de services est la bonne façon d'ouvrir les services de liaison de conteneurs de services Laravel. Dans le même temps, grâce à la méthode d'enregistrement du fournisseur de services, il est également utile de comprendre comment le conteneur de services Laravel gère tous les services. Nous avons mentionné précédemment que tous les services sont enregistrés dans le conteneur de services en lisant la liste de configuration du fournisseur de services à partir du fichier de configuration config/app.php.

Ce qui précède est l'introduction du fournisseur de services.

Pour des articles plus techniques liés à Laravel, veuillez visiter la colonne du didacticiel Mise en route avec Laravel Framework pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Comment évaluer LaravelArticle suivant:Comment évaluer Laravel