Contrôleurs
Chamilo 2.0 utilise un grand nombre de contrôleurs (de l'ordre de dizaines) organisés à travers les bundles. Le nombre exact varie d'une version à l'autre — considérez les noms ci-dessous comme illustratifs, et non exhaustifs.
Types de contrôleurs
Contrôleurs d'administration
Situés dans src/CoreBundle/Controller/Admin/. Gèrent l'administration de la plateforme :
AdminController— Tableau de bord, informations sur les fichiers, test d'e-mailUserListController— Gestion CRUD des utilisateursCourseListController— Gestion des coursSessionAdminController— Gestion des sessionsSettingsController— Paramètres de la plateformeSecurityController— Tentatives de connexion, événements IDSPluginsController— Gestion des pluginsRoomController— Gestion des salles
Contrôleurs d'actions API
Actions personnalisées de la plateforme API dans src/CoreBundle/Controller/Api/ :
Ces contrôleurs étendent les fonctionnalités CRUD intégrées de la plateforme API avec une logique métier personnalisée. Exemples :
CreateDocumentFileAction— Téléversement de fichiers pour les documentsCreateStudentPublicationFileAction— Téléversement de soumissions pour les travauxUpdateVisibilityDocument— Basculer la visibilité d'un documentExportCGlossaryAction— Exporter le glossaireMoveDocumentAction— Déplacer un document vers un autre dossier
Pour les opérations de lecture/écriture qui ne nécessitent pas de contrôleur HTTP dédié — c'est-à-dire lorsque vous souhaitez uniquement modifier la manière dont un élément ou une collection est récupéré ou persisté — préférez un State Provider ou un State Processor (voir ci-dessous). Les contrôleurs d'actions API sont mieux réservés aux points de terminaison qui nécessitent réellement une logique au niveau de la requête (téléversements de fichiers, formats de réponse personnalisés, flux en plusieurs étapes).
Contrôleur AI
src/CoreBundle/Controller/AiController.php est le point d'entrée pour les points de terminaison liés à l'IA (génération de questions Aiken, génération de parcours d'apprentissage, génération d'images/vidéos, évaluation de réponses ouvertes, analyse de documents…). L'ensemble exact des routes évolue rapidement — consultez les attributs #[Route] du contrôleur pour obtenir la liste actuelle plutôt que de vous fier à une copie ici.
Contrôleur de chat
src/CoreBundle/Controller/ChatController.php gère le chat en temps réel et le tuteur IA :
Messagerie entre utilisateurs
Chat avec le tuteur IA (panneau de chat ancré)
Historique des messages et polling
Fournisseurs et processeurs d'état de la plateforme API
Tous les points de terminaison API ne sont pas soutenus par un contrôleur. API Platform 3 répartit le travail entre deux interfaces :
State Providers (
ApiPlatform\State\ProviderInterface) — renvoient des données pour les opérationsGET(un seul élément ou une collection).State Processors (
ApiPlatform\State\ProcessorInterface) — gèrent les écritures pour les opérationsPOST,PUT,PATCHetDELETE.
Les implémentations de Chamilo se trouvent dans src/CoreBundle/State/ (environ 35+ classes). Elles sont liées aux entités via les arguments provider: et processor: des opérations #[ApiResource] plutôt que via des routes.
Quand les utiliser
Optez pour un fournisseur/processeur — au lieu d'un contrôleur d'action API — lorsque :
Le point de terminaison suit la forme REST standard (lister / lire / créer / mettre à jour / supprimer) mais nécessite une logique personnalisée d'assemblage ou de persistance des données.
Vous devez filtrer, dénormaliser ou enrichir le résultat d'une collection ou d'un élément lu (par exemple, en respectant l'URL d'accès actuelle, le contexte du cours ou les règles de visibilité).
Vous devez exécuter des effets secondaires lors de l'écriture (journaux d'audit, génération de fichiers, mises à jour d'entités liées) tout en conservant le pipeline de normalisation, de validation et de pagination d'API Platform.
Vous souhaitez que l'opération reste découvrable dans le schéma OpenAPI / Hydra sans enregistrer une route personnalisée.
Si le point de terminaison nécessite un accès brut à Request, renvoie une charge utile non liée à une ressource (téléchargement de fichier, CSV, redirection) ou orchestre un flux en plusieurs étapes, un contrôleur d'action API dans src/CoreBundle/Controller/Api/ est un meilleur choix.
Configuration sur l'entité
Référez la classe sur l'opération :
Exemple de fournisseur
src/CoreBundle/State/DocumentProvider.php résout un CDocument par variable URI et lance NotFoundHttpException lorsqu'il est manquant :
Exemple de processeur
src/CoreBundle/State/ColorThemeStateProcessor.php délègue au processeur par défaut de Doctrine persistProcessor, puis exécute des effets secondaires (génère un fichier CSS sur le système de fichiers Flysystem des thèmes, lie le thème à l'URL d'accès actuelle) :
Modèles à connaître
Composer avec le processeur par défaut. Décorez
ProcessorInterface $persistProcessor(intégré à Doctrine) afin que la logique spécifique à Chamilo s'exécute autour de la persistance standard, et non à la place de celle-ci.Les fournisseurs de collections gèrent leur propre pagination. Lorsqu'un fournisseur de collections construit une requête personnalisée, il doit respecter les paramètres
?page,?itemsPerPageet les filtres de recherche — le paginateur automatique d'API Platform ne s'active que pour le fournisseur de collections par défaut de Doctrine.Une classe par ressource + type d'opération est courant, mais un fournisseur peut servir plusieurs opérations (voir
UsergroupStateProvider, réutilisé pour quatre opérations surUsergroup).Convention de nommage :
<Entity>StateProvider/<Entity>StateProcessorpour les gestionnaires à l'échelle de la ressource ;<Entity><Action>Processor(par exempleCBlogAssignAuthorProcessor,CStudentPublicationDeleteProcessor) pour des opérations plus spécifiques.
Routage
Les contrôleurs utilisent les attributs PHP 8 pour les définitions de routes :
Les ressources d'API Platform utilisent les attributs #[ApiResource] sur les entités, avec des opérations personnalisées pointant vers des actions de contrôleur.
Traits
Les contrôleurs utilisent des traits partagés pour des fonctionnalités communes :
ControllerTrait— Accès aux paramètres, au sérialiseur et aux services communsCourseControllerTrait— Aides au contexte des coursResourceControllerTrait— Opérations sur les nœuds de ressources
Mis à jour
Ce contenu vous a-t-il été utile ?