Maison >développement back-end >tutoriel php >Apprenez à créer des façades personnalisées à Laravel

Apprenez à créer des façades personnalisées à Laravel

Karen Carpenter
Karen Carpenteroriginal
2025-03-06 02:37:12533parcourir

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:

Learn how to create custom Facades in Laravel

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!

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