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ónicoUserListController— CRUD de usuariosCourseListController— Gestión de cursosSessionAdminController— Gestión de sesionesSettingsController— Configuraciones de la plataformaSecurityController— Intentos de inicio de sesión, eventos de IDSPluginsController— Gestión de complementosRoomController— 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 documentosCreateStudentPublicationFileAction— Carga de entregas de tareasUpdateVisibilityDocument— Cambiar la visibilidad de un documentoExportCGlossaryAction— Exportar glosarioMoveDocumentAction— 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 operacionesGET(un solo elemento o una colección).State Processors (
ApiPlatform\State\ProcessorInterface) — manejan escrituras para operacionesPOST,PUT,PATCHyDELETE.
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,?itemsPerPagey 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 sobreUsergroup).Convención de nomenclatura:
<Entity>StateProvider/<Entity>StateProcessorpara 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 comunesCourseControllerTrait— Ayudantes de contexto de cursoResourceControllerTrait— Operaciones de nodos de recursos
Última actualización
¿Te fue útil?