Les services
Elementum intègre différents services qui permettent de simplifier l'utilisation des fonctionnalités du framework.
Qu'est-ce qu'un service ?
Un service est un ensemble de méthodes qui ont un rôle bien précis et qui à pour but d'être distribués dans l'écosystème Elementum afin de simplifier le développement.
Quels sont les services disponibles ?
Voici une liste exhaustive des services disponibles :
router: Gère la création des routes.twig: Gestion des templates.customize: Gestion des personnalisations.config: Gestion des configurations.api: Gestion des routes API accessible à partir de/wp-json.postTypes: Gestion et résolution des post-types de l'écosystème.controller.resolver: Résolution des controllers de l'écosystème.component: Gestion des composants.templates: Gestion des templates.dashboard.widgets: Gestion des widgets du tableau de bord.dashboard.alerts: Gestion des alertes côté administration.plugins: Gestion des plugins.
Comment utiliser un service ?
Certains services sont injectés automatiquement dans les controllers. De fait ils sont accessibles via la propriété $this dans les controllers suivis d'une méthode portant le nom du service.
L'objectif n'étant pas d'accéder aux services directement, des méthodes tel quel :
customize()postTypes()getPostType()render()
sont disponibles dans tout les controllers.
Cherche un service à la source
Néanmoins, il est possible d'accéder directement à un service en procédant de la sorte :
use Elementum\Kernel\Service\Router; global $kernel; $kernel->getService('router'); /** * OU */ $kernel->getService(Router::NAME);
Pour obtenir la liste des services, vous pouvez :
dump($kernel->container->getServices());
La méthode getServices retourne un tableau des services ajouté et utilisé dans l'ordre de leurs priorités.
Ajouter un service
Créer votre class Singleton (en utilisant le trait Elementum\Trait\Singleton) et ajoutez le service dans le container via le code suivant :
#[Kernel('services')] public function registerServices(Elementum\Container $container): void { $container->addService(MyService::NAME , [MyService::class, 'getInstance'], args: [], priority: 200); $container->useService(MyService::NAME, function($service){ $service->doSomething(); }, priority: 800); }
Il est recommandé de spécifier le nom du service via la constante NAME de la class.
Aussi, la méthode getInstance est automatiquement disponible si vous utiliser le trait Elementum\Trait\Singleton.
Args
Les args sont les paramètres passé la callback passé en paramètre plus tôt.
Priorité
La priorité spécifie l'ordre d'execution de l'ajout ou de l'utilisation du service. Plus la priorité est élevée, plus le service sera utilisé en dernier.
Elle est calculé automatiquement en fonction du moment à laquelle le service est ajouté.
Pour l'utilisation, la priorité est basé sur celle de l'ajout afin d'évité d'utiliser le service avant qu'il soit ajouté.
Toute fois, dans l'exemple donné, je peux spécifier que mon useService s'éxecute bien plus tard si besoin.