Maison développement back-end tutoriel php Qu'est-ce que la façade dans Laravel ?

Qu'est-ce que la façade dans Laravel ?

Sep 23, 2017 am 09:12 AM
facade laravel

Facade est en fait un proxy statique d'une classe dans un conteneur. Il vous permet d'appeler statiquement n'importe quelle méthode de n'importe quel objet stocké dans le conteneur. L'article suivant vous présente principalement les informations pertinentes sur le processus de chargement et le principe de Facade dans Laravel. Les amis dans le besoin peuvent s'y référer.

Qu'est-ce que la façade dans Laravel ?

La définition donnée par le document officiel

« Les façades offrent une interface « statique ». Laravel est livré avec de nombreuses façades qui donnent accès à la plupart des fonctionnalités. Les façades Laravel sont en fait des « proxys statiques » pour les classes sous-jacentes dans le conteneur de services. Par rapport aux méthodes statiques traditionnelles, elles peuvent fournir une syntaxe plus flexible, plus facile à tester et plus élégante lorsqu'elles sont utilisées. ”

Vous n'avez pas besoin d'utiliser une longue liste d'espaces de noms ou d'instancier l'objet pour accéder aux méthodes spécifiques de l'objet.

use Config;

class Test
{
 public function index()
 {
 return Config::get('app.name');
 }
}
Copier après la connexion

Démarrage de façade et enregistrement

Le démarrage de Facade est enregistré dans IlluminateFoundationBootstrapRegisterFacades

public function bootstrap(Application $app)
{
 Facade::clearResolvedInstances();
 Facade::setFacadeApplication($app);

 AliasLoader::getInstance(array_merge(
 $app->make('config')->get('app.aliases', []),
 $app->make(PackageManifest::class)->aliases()
 ))->register();
}
Copier après la connexion

La configuration d'alias par défaut est lue à partir des alias sous le fichier de configuration de l'application, et le PackageManifest l'est. 5.5 a de nouvelles règles de découverte automatique des packages. Ici, nous ne prenons pas en compte les alias fournis par le package PackageManifest pour l'instant

Parmi eux, array_merge renvoie un tableau au format suivant :

 "App" => "Illuminate\Support\Facades\App"
 "Artisan" => "Illuminate\Support\Facades\Artisan"
 "Auth" => "Illuminate\Support\Facades\Auth"
 "Blade" => "Illuminate\Support\Facades\Blade"
 ...
Copier après la connexion
.

Le code ci-dessus. Toutes les façades seront enregistrées pour le chargement automatique via AliasLoader. Le noyau est spl_autoload_register de php. Une fois l'enregistrement terminé, toutes les classes d'utilisation suivantes seront automatiquement chargées via la fonction de chargement 🎜>

<🎜. >
 /**
 * Prepend the load method to the auto-loader stack.
 *
 * @return void
 */
 protected function register()
 {
 if (! $this->registered) {
  spl_autoload_register([$this, &#39;load&#39;], true, true);

  $this->registered = true;
 }
 }
Copier après la connexion
Remarque :

Lors de la définition de spl_autoload_register ici, le dernier paramètre passé est vrai. Lorsque ce paramètre est vrai, spl_autoload_register() ajoutera la fonction à la file d'attente, plutôt qu'à la fin. file d'attente (le chargement automatique est effectué en premier via cette fonction)

En d'autres termes,
Peu importe la classe spécifique que nous utilisons (AppUser) ou l'alias (Config), automatique le chargement sera d'abord effectué via la fonction de chargement. Lorsque la fonction renvoie false, le chargement automatique sera complété par d'autres fonctions de chargement automatique (telles que composer psr-4. Dans la méthode de chargement d'AliasLoader, la fonction class_alias est principalement utilisée pour implémenter). chargement automatique des alias

Voici un exemple officiel concernant class_alias :
<?php

use Config;
use App\User;

class Test
{
 public function index()
 {
 Config::get(&#39;app.name&#39;);
 new User();
 }
}
Copier après la connexion

Chargement de façade

public function load($alias)
{
 if (isset($this->aliases[$alias])) {
 return class_alias($this->aliases[$alias], $alias);
 }
}
Copier après la connexion

Quand on utilisez Facade, tel que :
class foo { }

class_alias(&#39;foo&#39;, &#39;bar&#39;);

$a = new foo;
$b = new bar;

// the objects are the same
var_dump($a == $b, $a === $b); //true
var_dump($a instanceof $b); //false

// the classes are the same
var_dump($a instanceof foo); //true
var_dump($a instanceof bar); //true

var_dump($b instanceof foo); //true
var_dump($b instanceof bar); //true
Copier après la connexion

En fait, la classe IlluminateSupportFacadesConfig est chargée (car nous avons enregistré class_alias), ce qui est tout à fait In :

Et toutes les façades héritent de la classe IlluminateSupportFacadesFacade, et une méthode __callStatic est définie dans cette classe de base, afin que nous puissions facilement utiliser Facade (sans instanciation).

<?php

use Config;

class Test
{
 public function index()
 {
 Config::get(&#39;app.name&#39;);
 }
}
Copier après la connexion
La méthode getFacadeRoot est utilisée pour obtenir la colonne d'instance spécifique de la classe alias Nous savons que toutes les classes Facade doivent définir une méthode getFacadeAccessor. Les valeurs de retour possibles de cette méthode sont :

<?php

use Illuminate\Support\Facades\Config;

class Test
{
 public function index()
 {
  Config::get(&#39;app.name&#39;);
 }
}
Copier après la connexion

String type string (tel que config, db)

<?php

public static function __callStatic($method, $args)
{
 $instance = static::getFacadeRoot();

 if (! $instance) {
  throw new RuntimeException(&#39;A facade root has not been set.&#39;);
 }

 return $instance->$method(...$args);
}
Copier après la connexion

String type string-like ( tels que Tels que AppServiceSomeService)
  • Objet d'instanciation spécifique à un objet
  • Fermeture de fermeture
  • tels que La méthode getFacadeAccessor de Config Facade est la suivante :
  • La méthode getFacadeRoot récupérera l'objet colonne réel correspondant du conteneur en fonction de la valeur de retour de

    .

Puisque la colonne d'instance de configuration

protected static function getFacadeAccessor()
{
 return &#39;config&#39;;
}
Copier après la connexion

a été enregistrée dans le conteneur APP, getFacadeAccessor() accède en fait à la méthode

de la colonne d'instance du référentiel.
public static function getFacadeRoot()
{
 $name = static::getFacadeAccessor();
 
 if (is_object($name)) {
  return $name;
 }

 if (isset(static::$resolvedInstance[$name])) {
  return static::$resolvedInstance[$name];
 }

 return static::$resolvedInstance[$name] = static::$app[$name];
}
Copier après la connexion

Pour plus de connaissances connexes, veuillez visiter le

Site Web PHP chinois
<?php
//Illuminate\Foundation\Bootstrap/LoadConfiguration

$app->instance(&#39;config&#39;, $config = new Repository($items));
Copier après la connexion
 ! !

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Laravel - Commandes artisanales Laravel - Commandes artisanales Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7 est livré avec une nouvelle façon de traiter et de tester de nouvelles commandes. Il inclut une nouvelle fonctionnalité de test des commandes artisanales et la démonstration est mentionnée ci-dessous ?

Laravel - Console artisanale Laravel - Console artisanale Aug 27, 2024 am 10:51 AM

Laravel - Artisan Console - Le framework Laravel fournit trois outils principaux d'interaction via la ligne de commande, à savoir : Artisan, Ticker et REPL. Ce chapitre explique en détail Artisan.

Laravel - Personnalisations de la pagination Laravel - Personnalisations de la pagination Aug 27, 2024 am 10:51 AM

Laravel - Personnalisations de pagination - Laravel inclut une fonctionnalité de pagination qui aide un utilisateur ou un développeur à inclure une fonctionnalité de pagination. Le paginateur Laravel est intégré au générateur de requêtes et à Eloquent ORM. La méthode paginate automatique

Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Apr 01, 2025 pm 02:45 PM

Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? Mar 31, 2025 pm 11:24 PM

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Mar 31, 2025 pm 11:48 PM

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Apr 01, 2025 am 07:09 AM

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

Laravel - Serveur de vidage Laravel - Serveur de vidage Aug 27, 2024 am 10:51 AM

Laravel - Dump Server - Le serveur de dump Laravel est livré avec la version de Laravel 5.7. Les versions précédentes n'incluent aucun serveur de dump. Le serveur de vidage sera une dépendance de développement dans le fichier laravel/laravel composer.

See all articles