Symfony 架构
束(Bundles)
Chamilo 2.0 分为三个 Symfony 束:
CoreBundle (src/CoreBundle/)
src/CoreBundle/)最大的束,处理平台范围内的所有事务:
用户和认证 — 用户实体、角色、JWT 令牌、OAuth2 提供商
资源系统 — ResourceNode 和 ResourceFile(统一的内容抽象)
平台设置 — 位于
src/CoreBundle/Settings/的设置模式,涵盖每个可配置的方面管理 — 用于用户、课程、会话和插件管理的管理员控制器
AI 提供商 — 针对 OpenAI、Gemini、Mistral、DeepSeek、Grok 的工厂模式
文件存储 — 基于 Flysystem 的存储适配器(本地、S3、Azure、GCS)
安全 — 投票者、访问控制、角色层级
工具 — 通过工具系统注册的课程工具定义
CourseBundle (src/CourseBundle/)
src/CourseBundle/)与课程内容相关的所有内容:
内容实体 — 101 个实体,涵盖文档、练习、学习路径、论坛、词汇表、调查、考勤、博客、作业等
课程复制 — 支持 Common Cartridge 1.3 和 Moodle 格式的导入/导出
课程设置 — 课程级别的设置模式
LtiBundle (src/LtiBundle/)
src/LtiBundle/)LTI 1.3 标准实现:
平台和工具注册 — 管理外部工具连接
启动处理 — LTI 启动流程控制器
成绩回传 — 将外部工具的成绩返回到 Chamilo
服务容器
Chamilo 使用 Symfony 的依赖注入容器。服务配置在:
config/services.yaml— 全局服务定义每个束的
DependencyInjection/目录 — 特定束的服务
安全架构
安全系统配置在 config/packages/security.yaml 中:
密码哈希 — 支持 bcrypt(默认),并从旧版的 SHA1 和 MD5 迁移
角色层级 — 18 个角色按层级组织(ROLE_GLOBAL_ADMIN > ROLE_ADMIN > ROLE_TEACHER > ROLE_STUDENT > ROLE_USER;其他角色包括 ROLE_HR、ROLE_INVITEE、ROLE_STUDENT_BOSS、ROLE_SESSION_MANAGER、ROLE_QUESTION_MANAGER)
上下文敏感角色 — 课程级别的角色(ROLE_CURRENT_COURSE_TEACHER、ROLE_CURRENT_COURSE_STUDENT)根据注册情况在每次请求时计算
防火墙 — API 使用 JWT 认证,Web 界面使用基于会话的认证
投票者 — 通过 Symfony 投票者实现资源级别的访问控制
遗留代码
某些功能仍然使用位于 public/main/ 的遗留 PHP 代码:
练习渲染和交互
学习路径播放器
一些管理工具
这些功能正在逐步迁移到 Symfony+Vue 架构。遗留页面通过一个兼容层提供服务,该兼容层启动了 Symfony 内核。
最后更新于
这有帮助吗?