Resolvers
Les Resolvers sont des classes utilitaires chargées de localiser et d'instancier dynamiquement les classes d'Elementum (contrôleurs, fonctions Twig, attributs, etc.).
Organisation
Depuis la version 26.0.8.6, les resolvers ont été déplacés de src/Helpers/ vers src/Resolvers/ pour une meilleure séparation des responsabilités :
| Ancien chemin | Nouveau chemin |
|---|---|
src/Helpers/ClassResolver.php | src/Resolvers/ClassResolver.php |
src/Helpers/ControllerResolver.php | src/Resolvers/ControllerResolver.php |
Si vous importiez directement ces classes depuis Elementum\Helpers, mettez à jour vos use statements vers Elementum\Resolvers.
ClassResolver
ClassResolver permet de scanner les dossiers à la recherche de classes implémentant une interface ou un trait spécifique, et de les charger dynamiquement.
Utilisation typique
use Elementum\Resolvers\ClassResolver; // Récupérer les chemins des classes Twig Functions $paths = ClassResolver::paths(ClassResolver::TWIG_FUNCTIONS_PATH_SUFFIX); // Charger toutes les classes et exécuter un callback ClassResolver::loadElementumClasses($paths, 'Twig\\Functions', function ($class) { // $class contient le nom de classe complet (FQCN) // ex: Elementum\Theme\Twig\Functions\MyFunction });
Constantes utiles
TWIG_FUNCTIONS_PATH_SUFFIX— Chemin relatif vers les fonctions Twig (app/Twig/Functions)TWIG_FILTERS_PATH_SUFFIX— Chemin relatif vers les filtres Twig (app/Twig/Filters)ADMIN_PAGE_PATH_SUFFIX— Chemin relatif vers les pages admin (app/Admin/Pages)POST_TYPE_PATH_SUFFIX— Chemin relatif vers les post types (app/PostTypes)
ControllerResolver
ControllerResolver est spécialisé dans la résolution des contrôleurs Elementum. Il s'occupe de :
- Localiser les classes contrôleurs dans les thèmes et plugins
- Instancier les contrôleurs avec leurs dépendances
- Gérer la résolution des attributs (
#[Action],#[Filter], etc.)
Utilisation
Ce resolver est principalement utilisé en interne par le kernel Elementum. Vous n'avez généralement pas besoin de l'utiliser directement dans votre code.
Bonnes pratiques
- Préférez l'utilisation des Facades ou des services enregistrés plutôt que d'appeler directement les resolvers
- Les resolvers sont conçus pour être utilisés par le kernel ; leur API interne peut évoluer
- Si vous avez besoin de charger dynamiquement des classes, étendez
ClassResolverplutôt que de le dupliquer