> For the complete documentation index, see [llms.txt](https://docs.chamilo.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chamilo.org/2.x/nl/ontwikkelaarsgids/developer-guide/backend/symfony-architecture.md).

# Symfony Architectuur

## Bundels

Chamilo 2.0 is gestructureerd in drie Symfony-bundels:

### CoreBundle (`src/CoreBundle/`)

De grootste bundel, die alle platformbrede zaken afhandelt:

* **Gebruikers en authenticatie** — Gebruikersentiteit, rollen, JWT-tokens, OAuth2-providers
* **Bronnensysteem** — ResourceNode en ResourceFile (de uniforme inhoudsabstractie)
* **Platforminstellingen** — Instellingsschema's in `src/CoreBundle/Settings/` die elk configureerbaar aspect dekken
* **Beheer** — Beheerderscontrollers voor gebruikers-, cursus-, sessie- en pluginbeheer
* **AI-providers** — Factory-patroon voor OpenAI, Gemini, Mistral, DeepSeek, Grok
* **Bestandsopslag** — Flysystem-gebaseerde opslagadapters (lokaal, S3, Azure, GCS)
* **Beveiliging** — Stemmers, toegangscontrole, rolhiërarchie
* **Tools** — Cursustooldefinities geregistreerd via het toolsysteem

### CourseBundle (`src/CourseBundle/`)

Alles wat specifiek is voor cursusinhoud:

* **Inhoudsentiteiten** — 101 entiteiten voor documenten, oefeningen, leerpaden, fora, woordenlijsten, enquêtes, aanwezigheid, blogs, opdrachten en meer
* **Cursus kopiëren** — Importeren/exporteren met ondersteuning voor Common Cartridge 1.3 en Moodle-formaat
* **Cursusinstellingen** — Instellingsschema's op cursusniveau

### LtiBundle (`src/LtiBundle/`)

Implementatie van de LTI 1.3-standaard:

* **Platform- en toolregistratie** — Beheer van externe toolverbindingen
* **Startafhandeling** — LTI-startstroomcontrollers
* **Cijferterugkoppeling** — Cijfers van externe tools terugsturen naar Chamilo

## Service Container

Chamilo gebruikt Symfony's dependency injection container. Diensten zijn geconfigureerd in:

* `config/services.yaml` — Globale dienstdefinities
* De `DependencyInjection/`-map van elke bundel — Bundelspecifieke diensten

## Beveiligingsarchitectuur

Het beveiligingssysteem is geconfigureerd in `config/packages/security.yaml`:

* **Wachtwoordhashing** — Ondersteunt bcrypt (standaard), met migratie van verouderde SHA1 en MD5
* **Rolhiërarchie** — 18 rollen hiërarchisch georganiseerd (ROLE\_GLOBAL\_ADMIN > ROLE\_ADMIN > ROLE\_TEACHER > ROLE\_STUDENT > ROLE\_USER; aanvullende rollen zijn onder andere ROLE\_HR, ROLE\_INVITEE, ROLE\_STUDENT\_BOSS, ROLE\_SESSION\_MANAGER, ROLE\_QUESTION\_MANAGER)
* **Contextgevoelige rollen** — Rollen op cursusniveau (ROLE\_CURRENT\_COURSE\_TEACHER, ROLE\_CURRENT\_COURSE\_STUDENT) worden per verzoek berekend op basis van inschrijving
* **Firewall** — JWT-authenticatie voor API, sessiegebaseerd voor webinterface
* **Stemmers** — Toegangscontrole op bronneniveau via Symfony-stemmers

## Verouderde Code

Sommige functies maken nog gebruik van verouderde PHP-code in `public/main/`:

* Weergave en interactie van oefeningen
* Leerpadspeler
* Sommige beheerdershulpmiddelen

Deze worden geleidelijk gemigreerd naar de Symfony+Vue-architectuur. Verouderde pagina's worden aangeboden via een compatibiliteitslaag die de Symfony-kernel opstart.
