Maison >cadre php >Laravel >La différence entre la façade Laravel et le fournisseur de services

La différence entre la façade Laravel et le fournisseur de services

藏色散人
藏色散人original
2019-08-06 11:16:042606parcourir

La différence entre la façade Laravel et le fournisseur de services

La différence entre le mode façade de Laravel et le fournisseur de services

Prenons l'exemple du propre système de fichiers de Laravel, dans la configuration Dans le tableau fournisseurs du fichier de configuration de /app.php, un fournisseur de services est enregistré :

Illuminate\Filesystem\FilesystemServiceProvider::class,

Une façade est définie dans le tableau alias :

‘File’ => Illuminate\Support\Facades\File::class,

A travers ces deux étapes, nous allons Il est très pratique d'utiliser les opérations liées au système de fichiers fournies par Laravel, et le formulaire d'appel est très simple, tel que :

File::exist ($path),判断文件是否存在。
File::get ($path, $lock = false),获取一个文件的内容。
File::append ($path, $data),把内容追加到一个文件末尾。
File::files ($directory),获取一个目录下所有文件。

Alors, comment cela se fait-il ? Parlons respectivement du fournisseur de services et du mode façade de Laravel.

Fournisseur de services

Regardons d'abord la définition :

Le fournisseur de services est le centre où toutes les applications Laravel sont démarrées. Tous les services principaux de Laravel, y compris vos propres applications, sont lancés via des fournisseurs de services.

Dans le fournisseur de services du système de fichiers, à l'emplacement /vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php, la méthode de registre peut voir qu'un singleton est lié :

protected function registerNativeFilesystem()
{
    $this->app->singleton('files', function () {
        return new Filesystem;
    });
}

Ce singleton est le mode singleton de la classe Filesystem . Bien entendu, ce fournisseur de services peut également lier d’autres singletons ou faire plus de choses. Nous étudions ici uniquement le principe de la méthode d’appel File::exist().

De cette façon, il existe une seule instance de fichiers, qui est en fait une instance de la classe Filesystem.

À ce stade, s'il n'y a pas de façade, vous pouvez également appeler la méthode de l'instance du système de fichiers, c'est-à-dire l'appeler comme ceci :

app(‘files’)->exist($path)

D'accord, parlons maintenant de la façade .

Facade Facade Pattern

Jetons d'abord un coup d'oeil à l'introduction :

Facades /fəˈsäd/ fournit une interface "statique" pour les classes disponibles dans le conteneur de services de l'application. Laravel est livré avec de nombreuses façades qui peuvent être utilisées pour accéder à presque tous ses services. Les façades Laravel sont des « proxys statiques » pour les classes de base dans le conteneur de services. Par rapport aux appels de méthodes statiques traditionnelles, les façades offrent une syntaxe plus simple et plus riche, tout en offrant une meilleure testabilité et évolutivité.

Au début de cet article, nous avons mentionné que le tableau alias définit un fichier. La classe spécifique est

Illuminate\Support\Facades\File::class,

Son contenu est :

class File extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'files';
    }
}

Il renvoie en fait un. name. Remarque Ce nom de fichier n'est-il pas le nom du modèle singleton qui vient d'être lié ? C'est exact.

De cette façon, vous pouvez utiliser l'alias ou la façade File pour appeler des méthodes dans cette instance du système de fichiers.

Grâce à cet article, j'espère que vous pourrez comprendre la relation entre les fournisseurs de services, Facade et les instances des classes réellement appelées.

Pour plus d'articles techniques liés à Laravel, veuillez visiter la colonne Tutoriel d'introduction au framework Laravel 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