Controllers
Chamilo 2.0 maakt gebruik van een groot aantal controllers (in de orde van tientallen), georganiseerd over de verschillende bundles. Het exacte aantal varieert per versie — beschouw de onderstaande namen als illustratief, niet als uitputtend.
Soorten Controllers
Beheerderscontrollers
Gelegen in src/CoreBundle/Controller/Admin/. Behandelen platformbeheer:
AdminController— Dashboard, bestandsinformatie, e-mailtestenUserListController— Gebruikers CRUDCourseListController— CursusbeheerSessionAdminController— SessiebeheerSettingsController— PlatforminstellingenSecurityController— Inlogpogingen, IDS-gebeurtenissenPluginsController— PluginbeheerRoomController— Ruimtebeheer
API Actiecontrollers
Aangepaste API Platform-acties in src/CoreBundle/Controller/Api/:
Deze breiden de ingebouwde CRUD van API Platform uit met aangepaste bedrijfslogica. Voorbeelden:
CreateDocumentFileAction— Bestandsupload voor documentenCreateStudentPublicationFileAction— Upload van opdrachtinzendingenUpdateVisibilityDocument— Zichtbaarheid van documenten aanpassenExportCGlossaryAction— Woordenlijst exporterenMoveDocumentAction— Een document naar een andere map verplaatsen
Voor lees-/schrijfbewerkingen die geen speciale HTTP-controller nodig hebben — dat wil zeggen, wanneer je alleen wilt wijzigen hoe een item of verzameling wordt opgehaald of opgeslagen — geef de voorkeur aan een State Provider of State Processor (zie hieronder). API Actiecontrollers zijn het best gereserveerd voor endpoints die echt logica op verzoekniveau nodig hebben (bestandsuploads, aangepaste antwoordformaten, meerstapsstromen).
AI Controller
src/CoreBundle/Controller/AiController.php is het toegangspunt voor AI-gerelateerde endpoints (Aiken-vraaggeneratie, leerpadgeneratie, beeld-/videogeneratie, open-antwoordbeoordeling, documentanalyse…). De exacte set routes evolueert snel — lees de #[Route]-attributen van de controller voor de huidige lijst in plaats van te vertrouwen op een kopie hier.
Chat Controller
src/CoreBundle/Controller/ChatController.php behandelt real-time chat en AI-tutor:
Gebruiker-tot-gebruiker berichten
AI-tutor chat (vastgezette chatpaneel)
Berichtgeschiedenis en polling
API Platform State Providers & Processors
Niet elk API-endpoint wordt ondersteund door een controller. API Platform 3 splitst het werk tussen twee interfaces:
State Providers (
ApiPlatform\State\ProviderInterface) — leveren gegevens voorGET-bewerkingen (een enkel item of een verzameling).State Processors (
ApiPlatform\State\ProcessorInterface) — behandelen schrijfbewerkingen voorPOST,PUT,PATCHenDELETE-bewerkingen.
Chamilo's implementaties bevinden zich in src/CoreBundle/State/ (ongeveer 35+ klassen). Ze zijn verbonden met entiteiten via de provider: en processor: argumenten van #[ApiResource]-bewerkingen in plaats van via routes.
Wanneer te gebruiken
Kies voor een provider/processor — in plaats van een API Actiecontroller — wanneer:
Het endpoint de standaard REST-vorm volgt (lijst / lezen / aanmaken / bijwerken / verwijderen) maar aangepaste gegevenssamenstelling of persistentielogica nodig heeft.
Je de resultaten van een verzameling of item-lezing moet filteren, denormaliseren of verrijken (bijvoorbeeld met respect voor de huidige Access URL, cursuscontext of zichtbaarheidsregels).
Je neveneffecten moet uitvoeren bij schrijven (auditlogs, bestandsgeneratie, updates van gerelateerde entiteiten) terwijl je de normalisatie-, validatie- en paginatiepijplijn van API Platform behoudt.
Je de bewerking vindbaar wilt houden in het OpenAPI / Hydra-schema zonder een aangepaste route te registreren.
Als het endpoint daarentegen directe toegang tot Request nodig heeft, een niet-bronpayload retourneert (bestandsdownload, CSV, omleiding), of een meerstapsstroom orkestreert, is een API Actiecontroller in src/CoreBundle/Controller/Api/ een betere keuze.
Koppeling aan de entiteit
Verwijs naar de klasse bij de bewerking:
Voorbeeld van een Provider
src/CoreBundle/State/DocumentProvider.php lost een CDocument op aan de hand van een URI-variabele en gooit een NotFoundHttpException wanneer deze ontbreekt:
Voorbeeld van een processor
src/CoreBundle/State/ColorThemeStateProcessor.php delegeert naar de standaard Doctrine persistProcessor en voert vervolgens neveneffecten uit (genereert een CSS-bestand op het Flysystem-bestandssysteem voor thema's, koppelt het thema aan de huidige Access URL):
Patronen om te kennen
Samenstellen met de standaard processor. Decoreer
ProcessorInterface $persistProcessor(de ingebouwde van Doctrine) zodat Chamilo-specifieke logica rondom de standaard persist wordt uitgevoerd, niet in plaats daarvan.Collectieproviders beheren hun eigen paginering. Wanneer een collectieprovider een aangepaste query bouwt, moet deze rekening houden met
?page,?itemsPerPageen zoekfilters — de automatische paginator van API Platform treedt alleen in werking voor de standaard Doctrine collectieprovider.Eén klasse per bron + type operatie is gebruikelijk, maar een provider kan meerdere operaties bedienen (zie
UsergroupStateProvider, hergebruikt voor vier operaties opUsergroup).Naamconventie:
<Entity>StateProvider/<Entity>StateProcessorvoor resourcebrede handlers;<Entity><Action>Processor(bijv.CBlogAssignAuthorProcessor,CStudentPublicationDeleteProcessor) voor specifiekere operaties.
Routing
Controllers gebruiken PHP 8 attributen voor routedefinities:
API Platform-bronnen gebruiken #[ApiResource] attributen op entiteiten, met aangepaste operaties die verwijzen naar controlleracties.
Traits
Controllers maken gebruik van gedeelde traits voor gemeenschappelijke functionaliteit:
ControllerTrait— Toegang tot instellingen, serializer en algemene servicesCourseControllerTrait— Hulpmiddelen voor cursuscontextResourceControllerTrait— Operaties voor resourceknooppunten
Laatst bijgewerkt
Was dit nuttig?