> 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/es/guia-para-desarrolladores/developer-guide/backend/symfony-architecture.md).

# Arquitectura de Symfony

## Bundles

Chamilo 2.0 está estructurado en tres bundles de Symfony:

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

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

* **Usuarios y autenticación** — Entidad de usuario, roles, tokens JWT, proveedores OAuth2
* **Sistema de recursos** — ResourceNode y ResourceFile (la abstracción unificada de contenido)
* **Configuraciones de la plataforma** — Esquemas de configuración 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 de fábrica para OpenAI, Gemini, Mistral, DeepSeek, Grok
* **Almacenamiento de archivos** — Adaptadores de almacenamiento basados en Flysystem (local, S3, Azure, GCS)
* **Seguridad** — Votantes, 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 relacionado con el contenido de los cursos:

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

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

Implementación del estándar LTI 1.3:

* **Registro de plataforma y herramientas** — Gestiona conexiones con herramientas externas
* **Gestión de lanzamiento** — Controladores para el flujo de lanzamiento de LTI
* **Retorno 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 de servicios globales
* Directorio `DependencyInjection/` de cada bundle — Servicios específicos de cada bundle

## Arquitectura de Seguridad

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

* **Hash de contraseñas** — Soporta bcrypt (por defecto), con migración desde los antiguos SHA1 y MD5
* **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** — Roles a nivel de curso (ROLE\_CURRENT\_COURSE\_TEACHER, ROLE\_CURRENT\_COURSE\_STUDENT) se calculan por solicitud en función de la inscripción
* **Firewall** — Autenticación JWT para la API, basada en sesiones para la interfaz web
* **Votantes** — Control de acceso a nivel de recursos mediante votantes de Symfony

## Código Heredado

Algunas funcionalidades aún utilizan código PHP heredado en `public/main/`:

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

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