Laravel Facades: un point d'accès pratique aux services
Les façades de Laravel offrent un moyen rationalisé d'interagir avec les services, simplifiant l'accès via une interface conviviale. Initialement, la méthode d'accessoires de façade peut sembler déroutante, mais la compréhension de son rôle clarifie son utilité. FACADES agit comme des procurations pratiques aux services sous-jacents dans le conteneur de service de Laravel. La localisation du service lié à une façade donnée est simple grâce à la méthode getFacadeAccessor()
. Cette méthode renvoie le nom du service enregistré.
Par exemple, l'accessoire de la façade DB
ressemble à ceci:
// Illuminate\Support\Facades\DB; protected static function getFacadeAccessor() { return 'db'; }
La chaîne 'db'
identifie le service dans le conteneur que la façade utilise. Cela peut être vérifié en utilisant Tinker:
Certaines façades peuvent déléguer des appels de méthode à une classe de gestionnaire, qui à son tour interagit avec une classe de connexion de macro ou de base de données de niveau inférieur:
public function __call($method, $parameters) { if (static::hasMacro($method)) { return $this->macroCall($method, $parameters); } return $this->connection()->$method(...$parameters); }
sans connexion spécifiée, le DatabaseManager
par défaut est la connexion configurée (par exemple, sqlite
dans l'exemple ci-dessus).
La documentation de Laravel fournit des détails complets sur les fonctionnalités de façade et une liste complète des façades disponibles.
Création de façades personnalisées
Bien qu'il ne soit pas strictement nécessaire pour le développement d'applications, la création de façades personnalisées peut augmenter la productivité, en particulier pour les services fréquemment utilisés. Ceci est particulièrement bénéfique lorsque vous travaillez avec des aides ou dans un espace de noms dédié AppFacades
. Cette approche équilibre la flexibilité de Laravel avec les conventions établies.
Pour générer une façade, utilisez la commande artisan:
php artisan make:class App/Facades/Example
En supposant que vous avez défini un service, AppExampleService
, dans le fournisseur de services de votre demande, la façade serait mise en œuvre comme suit:
namespace App\Facades; use Illuminate\Support\Facades\Facade; class Example extends Facade { protected static function getFacadeAccessor() { return 'example_service'; } }
Alternativement, si aucun alias n'est défini ou si une chaîne n'est pas utilisée dans le fournisseur de services, vous pouvez directement utiliser le nom de classe entièrement qualifié:
protected static function getFacadeAccessor() { return \App\ExampleService::class; }
Un avantage significatif des façades est la facilité de se moquer du service sous-jacent pendant les tests:
use App\Facades\Example; Example::shouldReceive('getLatestPosts') ->with($after_date) ->andReturn($test_posts);
sans façade, Laravel propose des méthodes comme partialMock()
pour des capacités de moquerie similaires:
$mock = $this->partialMock(MyApiService::class, function (MockInterface $mock) { $mock->shouldReceive('getLatestPosts') ->with($after_date) ->andReturn($test_posts); });
En fin de compte, le choix entre l'utilisation de façades et d'autres méthodes dépend des préférences individuelles et des besoins du projet. Cependant, pour les services fréquemment accessibles, une façade peut améliorer considérablement la lisibilité du code et la maintenabilité sans sacrifier les avantages de l'injection de dépendance.
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!