> 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/id/panduan-pengembang/developer-guide/backend/symfony-architecture.md).

# Arsitektur Symfony

## Bundle

Chamilo 2.0 terstruktur dalam tiga bundle Symfony:

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

Bundle terbesar, bertanggung jawab atas semua aspek yang mencakup platform:

* **Pengguna dan autentikasi** — Entitas pengguna, peran, token JWT, penyedia OAuth2
* **Sistem sumber daya** — ResourceNode dan ResourceFile (abstraksi terpadu dari konten)
* **Pengaturan platform** — Skema pengaturan di `src/CoreBundle/Settings/` yang mencakup semua aspek yang dapat dikonfigurasi
* **Administrasi** — Pengontrol administrasi untuk pengelolaan pengguna, kursus, sesi, dan plugin
* **Penyedia AI** — Pola Factory untuk OpenAI, Gemini, Mistral, DeepSeek, Grok
* **Penyimpanan berkas** — Adaptor penyimpanan berbasis Flysystem (lokal, S3, Azure, GCS)
* **Keamanan** — Voters, kontrol akses, hierarki peran
* **Alat** — Definisi alat kursus yang terdaftar oleh sistem alat

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

Semua yang berkaitan dengan konten kursus:

* **Entitas konten** — 101 entitas untuk dokumen, latihan, jalur pembelajaran, forum, glosarium, jajak pendapat, kehadiran, blog, tugas, dan lainnya
* **Salinan kursus** — Impor/ekspor dengan dukungan format Common Cartridge 1.3 dan Moodle
* **Pengaturan kursus** — Skema pengaturan pada tingkat kursus

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

Implementasi standar LTI 1.3:

* **Registrasi platform dan alat** — Pengelolaan koneksi dengan alat eksternal
* **Pengelolaan peluncuran** — Pengontrol alur peluncuran LTI
* **Pengembalian nilai** — Pengiriman nilai dari alat eksternal ke Chamilo

## Kontainer Layanan

Chamilo menggunakan kontainer injeksi dependensi dari Symfony. Layanan dikonfigurasi di:

* `config/services.yaml` — Definisi layanan global
* Direktori `DependencyInjection/` pada setiap bundle — Layanan khusus untuk setiap bundle

## Arsitektur Keamanan

Sistem keamanan dikonfigurasi di `config/packages/security.yaml`:

* **Hash kata sandi** — Mendukung bcrypt (default), dengan migrasi dari SHA1 dan MD5 lama
* **Hierarki peran** — 18 peran yang diatur secara hierarkis (ROLE\_GLOBAL\_ADMIN > ROLE\_ADMIN > ROLE\_TEACHER > ROLE\_STUDENT > ROLE\_USER; peran tambahan meliputi ROLE\_HR, ROLE\_INVITEE, ROLE\_STUDENT\_BOSS, ROLE\_SESSION\_MANAGER, ROLE\_QUESTION\_MANAGER)
* **Peran sensitif konteks** — Peran pada tingkat kursus (ROLE\_CURRENT\_COURSE\_TEACHER, ROLE\_CURRENT\_COURSE\_STUDENT) dihitung per permintaan berdasarkan pendaftaran
* **Firewall** — Autentikasi JWT untuk API, berbasis sesi untuk antarmuka web
* **Voters** — Kontrol akses pada tingkat sumber daya melalui voters Symfony

## Kode Lama

Beberapa fitur masih menggunakan kode PHP lama di `public/main/`:

* Rendering dan interaksi latihan
* Pemutar jalur pembelajaran
* Beberapa alat administrasi

Fitur-fitur ini secara bertahap dimigrasikan ke arsitektur Symfony+Vue. Halaman lama disajikan melalui lapisan kompatibilitas yang menginisialisasi kernel Symfony.
