Comprendre et utiliser les facades en Laravel
Le concept des façades est de créer une classe qui sert de façade à une autre classe, rendant cette dernière accessible via des appels statiques.
Dans Laravel, les façades offrent une manière simple et statique d’accéder aux classes disponibles dans le conteneur de services. Plutôt que d’accéder directement à ces classes en utilisant l’injection de dépendances, les façades vous permettent d’y accéder via des méthodes statiques. Cela rend le code plus lisible et plus facile à tester.
Implémentation et explication du design pattern façade en PHP
class QueryFacade {
public static function __callStatic($name, $arguments){
$query = new \Core\Database\QueryBuilder();
return call_user_func_array([$query, $name], $arguments);
}
}
// On peut ensuite l'utiliser de la manière suivante :
QueryFacade::select('id', 'titre')->from('articles');
// Ce qui est équivalent à :
$query = new \Core\Database\QueryBuilder();
$query->select('id', 'titre')->from('articles');
1. Les méthodes select
et from
sont appelées sur QueryFacade
, mais elles ne sont pas définies dans la classe QueryFacade
elle-même. Par conséquent, la méthode __callStatic
est invoquée.
2. À l’intérieur de __callStatic
, une nouvelle instance de la classe QueryBuilder
est créée.
3. Ensuite, la méthode appelée est exécutée sur cette instance avec les arguments fournis.
call_user_func_array([$foo, "bar"], ["three", "four"]);
signifie un appel de la méthode $foo->bar()
avec les 2 arguments ‘three’ et ‘four’.
4. Finalement, le résultat de l’appel de méthode est retourné.
Cela permet d’utiliser la classe QueryFacade
de manière similaire à la classe QueryBuilder
sans avoir à instancier explicitement un objet QueryBuilder
à chaque fois.
Ainsi, lorsque vous utilisez QueryFacade::select('id', 'titre')->from('articles');
, cela revient à créer une instance de QueryBuilder
, puis à appeler les méthodes select
et from
sur cette instance.