Controladores
O Chamilo 2.0 utiliza um grande número de controladores (na ordem de dezenas) organizados pelos bundles. A contagem exata varia de versão para versão — considere os nomes abaixo como ilustrativos, não exaustivos.
Tipos de Controladores
Controladores de Administração
Localizados em src/CoreBundle/Controller/Admin/. Gerenciam a administração da plataforma:
AdminController— Painel de controle, informações de arquivos, teste de e-mailUserListController— CRUD de usuáriosCourseListController— Gerenciamento de cursosSessionAdminController— Gerenciamento de sessõesSettingsController— Configurações da plataformaSecurityController— Tentativas de login, eventos de IDSPluginsController— Gerenciamento de pluginsRoomController— Gerenciamento de salas
Controladores de Ações de API
Ações personalizadas da API Platform em src/CoreBundle/Controller/Api/:
Estes estendem o CRUD integrado da API Platform com lógica de negócios personalizada. Exemplos:
CreateDocumentFileAction— Upload de arquivos para documentosCreateStudentPublicationFileAction— Upload de submissão de tarefasUpdateVisibilityDocument— Alternar visibilidade de documentosExportCGlossaryAction— Exportar glossárioMoveDocumentAction— Mover um documento para uma pasta diferente
Para operações de leitura/escrita que não necessitam de um controlador HTTP dedicado — ou seja, quando você só deseja alterar como um item ou coleção é obtido ou persistido — prefira um State Provider ou State Processor (veja abaixo). Os Controladores de Ações de API são mais adequados para endpoints que realmente precisam de lógica no nível da requisição (uploads de arquivos, formatos de resposta personalizados, fluxos de várias etapas).
Controlador de IA
src/CoreBundle/Controller/AiController.php é o ponto de entrada para endpoints relacionados a IA (geração de questões Aiken, geração de caminhos de aprendizagem, geração de imagens/vídeos, avaliação de respostas abertas, análise de documentos...). O conjunto exato de rotas evolui rapidamente — leia os atributos #[Route] do controlador para a lista atual, em vez de depender de uma cópia aqui.
Controlador de Chat
src/CoreBundle/Controller/ChatController.php gerencia chat em tempo real e tutor de IA:
Mensagens entre usuários
Chat com tutor de IA (painel de chat ancorado)
Histórico de mensagens e polling
Provedores e Processadores de Estado da API Platform
Nem todos os endpoints de API são suportados por um controlador. A API Platform 3 divide o trabalho entre duas interfaces:
State Providers (
ApiPlatform\State\ProviderInterface) — retornam dados para operaçõesGET(um único item ou uma coleção).State Processors (
ApiPlatform\State\ProcessorInterface) — gerenciam escritas para operaçõesPOST,PUT,PATCHeDELETE.
As implementações do Chamilo estão em src/CoreBundle/State/ (cerca de 35+ classes). Elas são conectadas às entidades por meio dos argumentos provider: e processor: das operações #[ApiResource], em vez de por rotas.
Quando usá-los
Opte por um provedor/processador — em vez de um Controlador de Ações de API — quando:
O endpoint segue o formato REST padrão (listar / ler / criar / atualizar / excluir), mas precisa de lógica personalizada de montagem ou persistência de dados.
Você precisa filtrar, desnormalizar ou enriquecer o resultado de uma coleção ou leitura de item (por exemplo, respeitando a URL de Acesso atual, contexto do curso ou regras de visibilidade).
Você precisa executar efeitos colaterais na escrita (logs de auditoria, geração de arquivos, atualizações de entidades relacionadas) enquanto mantém o pipeline de normalização, validação e paginação da API Platform.
Você deseja manter a operação detectável no esquema OpenAPI / Hydra sem registrar uma rota personalizada.
Se o endpoint, por outro lado, precisar de acesso bruto ao Request, retornar um payload que não seja um recurso (download de arquivo, CSV, redirecionamento) ou orquestrar um fluxo de várias etapas, um Controlador de Ações de API em src/CoreBundle/Controller/Api/ é uma escolha mais adequada.
Conexão na entidade
Referencie a classe na operação:
Exemplo de Provedor
src/CoreBundle/State/DocumentProvider.php resolve um CDocument por variável de URI e lança NotFoundHttpException quando ausente:
Exemplo de Processador
src/CoreBundle/State/ColorThemeStateProcessor.php delega para o persistProcessor padrão do Doctrine, executando então efeitos colaterais (gera um arquivo CSS no sistema de arquivos Flysystem de temas, vincula o tema à URL de Acesso atual):
Padrões a Conhecer
Compor com o processador padrão. Decore
ProcessorInterface $persistProcessor(integrado ao Doctrine) para que a lógica específica do Chamilo seja executada ao redor da persistência padrão, e não em substituição a ela.Provedores de coleção gerenciam sua própria paginação. Quando um provedor de coleção constrói uma consulta personalizada, ele deve respeitar
?page,?itemsPerPagee filtros de busca — o paginador automático do API Platform só entra em ação para o provedor de coleção padrão do Doctrine.Uma classe por recurso + tipo de operação é comum, mas um provedor pode atender a várias operações (veja
UsergroupStateProvider, reutilizado em quatro operações noUsergroup).Convenção de nomenclatura:
<Entity>StateProvider/<Entity>StateProcessorpara manipuladores de recursos amplos;<Entity><Action>Processor(por exemplo,CBlogAssignAuthorProcessor,CStudentPublicationDeleteProcessor) para operações mais específicas.
Roteamento
Controladores utilizam atributos do PHP 8 para definições de rotas:
Recursos do API Platform utilizam atributos #[ApiResource] em entidades, com operações personalizadas apontando para ações de controladores.
Traits
Controladores utilizam traits compartilhados para funcionalidades comuns:
ControllerTrait— Acesso a configurações, serializador e serviços comunsCourseControllerTrait— Auxiliares de contexto de cursoResourceControllerTrait— Operações de nó de recurso
Última atualização
Isto foi útil?