For the complete documentation index, see llms.txt. This page is also available as Markdown.

Controladores

Chamilo 2.0 utiliza una gran cantidad de controladores (en el orden de docenas) organizados en los diferentes bundles. El número exacto varía de versión en versión; considera los nombres a continuación como ilustrativos, no exhaustivos.

Tipos de Controladores

Controladores de Administración

Ubicados en src/CoreBundle/Controller/Admin/. Gestionan la administración de la plataforma:

  • AdminController — Panel de control, información de archivos, pruebas de correo electrónico

  • UserListController — CRUD de usuarios

  • CourseListController — Gestión de cursos

  • SessionAdminController — Gestión de sesiones

  • SettingsController — Configuraciones de la plataforma

  • SecurityController — Intentos de inicio de sesión, eventos de IDS

  • PluginsController — Gestión de complementos

  • RoomController — Gestión de salas

Controladores de Acciones de API

Acciones personalizadas de API Platform en src/CoreBundle/Controller/Api/:

Estos extienden el CRUD integrado de API Platform con lógica de negocio personalizada. Ejemplos:

  • CreateDocumentFileAction — Carga de archivos para documentos

  • CreateStudentPublicationFileAction — Carga de entregas de tareas

  • UpdateVisibilityDocument — Cambiar la visibilidad de un documento

  • ExportCGlossaryAction — Exportar glosario

  • MoveDocumentAction — Mover un documento a una carpeta diferente

Para operaciones de lectura/escritura que no necesitan un controlador HTTP dedicado, es decir, cuando solo deseas cambiar cómo se obtiene o persiste un elemento o colección, prefiere un State Provider o State Processor (ver más abajo). Los Controladores de Acciones de API se reservan mejor para endpoints que realmente necesitan lógica a nivel de solicitud (cargas de archivos, formatos de respuesta personalizados, flujos de varios pasos).

Controlador de IA

src/CoreBundle/Controller/AiController.php es el punto de entrada para endpoints relacionados con IA (generación de preguntas Aiken, generación de rutas de aprendizaje, generación de imágenes/videos, calificación de respuestas abiertas, análisis de documentos...). El conjunto exacto de rutas evoluciona rápidamente; consulta los atributos #[Route] del controlador para obtener la lista actual en lugar de depender de una copia aquí.

Controlador de Chat

src/CoreBundle/Controller/ChatController.php maneja el chat en tiempo real y el tutor de IA:

  • Mensajería de usuario a usuario

  • Chat con tutor de IA (panel de chat anclado)

  • Historial de mensajes y sondeo

Proveedores y Procesadores de Estado de API Platform

No todos los endpoints de API están respaldados por un controlador. API Platform 3 divide el trabajo entre dos interfaces:

  • State Providers (ApiPlatform\State\ProviderInterface) — devuelven datos para operaciones GET (un solo elemento o una colección).

  • State Processors (ApiPlatform\State\ProcessorInterface) — manejan escrituras para operaciones POST, PUT, PATCH y DELETE.

Las implementaciones de Chamilo se encuentran en src/CoreBundle/State/ (alrededor de 35+ clases). Están conectadas a las entidades a través de los argumentos provider: y processor: de las operaciones #[ApiResource] en lugar de mediante rutas.

Cuándo usarlos

Opta por un proveedor/procesador, en lugar de un Controlador de Acciones de API, cuando:

  • El endpoint sigue la forma estándar de REST (listar / leer / crear / actualizar / eliminar) pero necesita lógica personalizada de ensamblaje o persistencia de datos.

  • Necesitas filtrar, desnormalizar o enriquecer el resultado de una colección o lectura de elementos (por ejemplo, respetando la URL de acceso actual, el contexto del curso o las reglas de visibilidad).

  • Necesitas ejecutar efectos secundarios en la escritura (registros de auditoría, generación de archivos, actualizaciones de entidades relacionadas) mientras mantienes la normalización, validación y pipeline de paginación de API Platform.

  • Deseas que la operación sea detectable en el esquema OpenAPI / Hydra sin registrar una ruta personalizada.

Si el endpoint, en cambio, necesita acceso directo a Request, devuelve una carga útil que no es un recurso (descarga de archivo, CSV, redirección) o coordina un flujo de varios pasos, un Controlador de Acciones de API en src/CoreBundle/Controller/Api/ es una mejor opción.

Conexión en la entidad

Referencia la clase en la operación:

Ejemplo de Proveedor

src/CoreBundle/State/DocumentProvider.php resuelve un CDocument por variable URI y lanza NotFoundHttpException cuando no se encuentra:


Ejemplo de procesador

src/CoreBundle/State/ColorThemeStateProcessor.php delega al procesador predeterminado de Doctrine persistProcessor, y luego ejecuta efectos secundarios (genera un archivo CSS en el sistema de archivos Flysystem de temas, vincula el tema a la URL de acceso actual):

Patrones a conocer

  • Componer con el procesador predeterminado. Decora ProcessorInterface $persistProcessor (el integrado de Doctrine) para que la lógica específica de Chamilo se ejecute alrededor de la persistencia estándar, no en lugar de ella.

  • Los proveedores de colecciones manejan su propia paginación. Cuando un proveedor de colecciones construye una consulta personalizada, debe respetar ?page, ?itemsPerPage y los filtros de búsqueda — el paginador automático de API Platform solo se activa para el proveedor de colecciones predeterminado de Doctrine.

  • Una clase por recurso + tipo de operación es común, pero un proveedor puede servir varias operaciones (ver UsergroupStateProvider, reutilizado en cuatro operaciones sobre Usergroup).

  • Convención de nomenclatura: <Entity>StateProvider / <Entity>StateProcessor para manejadores de recursos completos; <Entity><Action>Processor (por ejemplo, CBlogAssignAuthorProcessor, CStudentPublicationDeleteProcessor) para operaciones más específicas.

Enrutamiento

Los controladores utilizan atributos de PHP 8 para definiciones de rutas:

Los recursos de API Platform utilizan atributos #[ApiResource] en las entidades, con operaciones personalizadas que apuntan a acciones de controladores.

Traits

Los controladores utilizan traits compartidos para funcionalidades comunes:

  • ControllerTrait — Acceso a configuraciones, serializador y servicios comunes

  • CourseControllerTrait — Ayudantes de contexto de curso

  • ResourceControllerTrait — Operaciones de nodos de recursos

Última actualización

¿Te fue útil?