> 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/3.x/es/guia-del-desarrollador/developer-guide/backend/symfony-architecture.md).

# Arquitectura Symfony

## Bundles

Chamilo 3.0 está estructurado en tres bundles de Symfony:

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

El bundle más grande, que gestiona todos los aspectos de la plataforma:

* **Usuarios y autenticación** — Entidad User, roles, tokens JWT, proveedores OAuth2
* **Sistema de recursos** — ResourceNode y ResourceFile (la abstracción unificada de contenidos)
* **Configuración de la plataforma** — esquemas de ajustes en `src/CoreBundle/Settings/` que cubren todos los aspectos configurables
* **Administración** — Controladores de administración para la gestión de usuarios, cursos, sesiones y plugins
* **Proveedores de IA** — Patrón Factory para OpenAI, Gemini, Mistral, DeepSeek, Grok
* **Almacenamiento de archivos** — Adaptadores de almacenamiento basados en Flysystem (local, S3, Azure, GCS)
* **Seguridad** — Voters, control de acceso, jerarquía de roles
* **Herramientas** — definiciones de herramientas de curso registradas a través del sistema de herramientas

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

Todo lo específico del contenido de los cursos:

* **Entidades de contenido** — 101 entidades para documentos, ejercicios, itinerarios de aprendizaje, foros, glosarios, encuestas, asistencia, blogs, tareas y más
* **Copia de cursos** — Importación/exportación con soporte de Common Cartridge 1.3 y formato Moodle
* **Ajustes del curso** — Esquemas de configuración a nivel de curso

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

Implementación del estándar LTI 1.3:

* **Registro de plataforma y herramienta** — Gestión de conexiones con herramientas externas
* **Gestión del lanzamiento** — Controladores del flujo de lanzamiento LTI
* **Devolución de calificaciones** — Devolución de calificaciones desde herramientas externas a Chamilo

## Contenedor de servicios

Chamilo utiliza el contenedor de inyección de dependencias de Symfony. Los servicios se configuran en:

* `config/services.yaml` — Definiciones globales de servicios
* El directorio `DependencyInjection/` de cada bundle — Servicios específicos del bundle

## Arquitectura de seguridad

El sistema de seguridad se configura en `config/packages/security.yaml`:

* **Hash de contraseñas** — Admite bcrypt (predeterminado), con migración desde SHA1 y MD5 heredados
* **Jerarquía de roles** — 18 roles organizados jerárquicamente (ROLE\_GLOBAL\_ADMIN > ROLE\_ADMIN > ROLE\_TEACHER > ROLE\_STUDENT > ROLE\_USER; roles adicionales incluyen ROLE\_HR, ROLE\_INVITEE, ROLE\_STUDENT\_BOSS, ROLE\_SESSION\_MANAGER, ROLE\_QUESTION\_MANAGER)
* **Roles sensibles al contexto** — Los roles a nivel de curso (ROLE\_CURRENT\_COURSE\_TEACHER, ROLE\_CURRENT\_COURSE\_STUDENT) se calculan por petición según la matrícula
* **Firewall** — Autenticación JWT para la API, basada en sesión para la interfaz web
* **Voters** — Control de acceso a nivel de recurso mediante voters de Symfony

## Código heredado

Algunas funcionalidades siguen utilizando código PHP heredado en `public/main/`:

* Renderizado e interacción de ejercicios
* Reproductor de itinerarios de aprendizaje
* Algunas herramientas de administración

Estas se están migrando progresivamente a la arquitectura Symfony+Vue. Las páginas heredadas se sirven a través de una capa de compatibilidad que arranca el kernel de Symfony.
