Maison >développement back-end >tutoriel php >Comment fonctionnent les façades Laravel et comment les utiliser ailleurs
Le modèle de façade simplifie les interactions d'objets complexes en fournissant une seule interface unifiée. Ce tutoriel montre comment adapter la mise en œuvre de la façade de Laravel à d'autres cadres, en tirant parti de la puissance des conteneurs IOC.
Ce guide assume la familiarité de base avec les conteneurs IOC. Nous explorerons le mécanisme de façade de Laravel, puis nous montrerons comment le reproduire ailleurs.
Concepts clés:
Facade
utilise une propriété $app
(une référence au conteneur de service) et la méthode magique __callStatic
pour résoudre et appeler dynamiquement des méthodes sur les services de conteneur. AliasLoader
gère les alias, rationalisant l'accès aux façades via des noms personnalisés. Il utilise spl_autoload_register
pour s'accrocher à la mise à jour de PHP. Facades de Laravel en détail:
Les façades de Laravel fournissent une interface de type statique aux services de conteneurs. Alors que le terme "façade" a déclenché un débat dans la communauté PHP concernant sa stricte adhésion au modèle de conception, sa fonctionnalité reste précieuse.
L'accès à un service directement à partir du conteneur implique App::make('some_service')->methodName()
. Une façade simplifie cela à someService::methodName()
.
Chaque service a une façade correspondante étendant la classe Laravel de Laravel Facade
. La méthode cruciale est getFacadeAccessor()
, qui renvoie le nom du conteneur du service. La magie de __callStatic
gère la résolution réelle du service et l'invocation de la méthode.
La classe Laravel Facade
:
La classe Facade
maintient la référence du conteneur ($app
) et implémente __callStatic
. Lorsqu'une méthode statique est appelée sur une façade, __callStatic
récupère le service et exécute la méthode demandée. La méthode getFacadeRoot()
est utilisée pour cette récupération de service. Une version simplifiée de __callStatic
est illustrée ci-dessous:
<code class="language-php">public static function __callStatic($method, $args) { $instance = static::getFacadeRoot(); return call_user_func_array([$instance, $method], $args); }</code>
Structure de classe de façade:
Une classe de façade étend la base Facade
et implémente getFacadeAccessor()
:
<code class="language-php"><?php namespace App\Facades; use Illuminate\Support\Facades\Facade; class SomeServiceFacade extends Facade { protected static function getFacadeAccessor() { return 'some.service'; } }</code>
Système d'alias de Laravel:
Laravel's config/app.php
contient des noms d'alias de mappage de mappage 'aliases'
à des noms de classe entièrement qualifiés. Le AliasLoader
itére dans ce tableau, enregistrant des fonctions Autoload pour créer des alias à l'aide de class_alias
. Cela permet d'utiliser des noms courts comme FancyName
au lieu de AppFacadesSomeServiceFacade
.
Implémentation de façades dans d'autres cadres (par exemple, silex):
Pour utiliser l'approche de la façade de Laravel dans Silex (ou un autre cadre), suivez ces étapes:
composer require illuminate/support
Facade
et implémentation getFacadeAccessor()
. IlluminateSupportFacadesFacade::setFacadeApplication($app);
AliasLoader
ou créez une classe similaire pour gérer les alias. aliases.php
: Définissez vos alias. AliasLoader
. Maintenant, vous pouvez utiliser vos façades avec des appels statiques simplifiés.
Questions fréquemment posées (FAQ):
La section FAQ fournie est déjà complète et bien structurée. Aucun changement n'est nécessaire.
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!