项目结构
顶层目录
chamilo/
├── assets/ # Frontend source code
│ ├── vue/ # Vue 3 application (components, views, router, stores)
│ ├── css/ # SCSS stylesheets
│ └── js/ # Legacy JavaScript
├── config/ # Symfony configuration (routes, services, packages)
├── public/ # Web root (index.php, legacy PHP pages, plugins)
│ ├── main/ # Legacy PHP modules (one subdirectory per tool)
│ └── plugin/ # Bundled and custom plugins
├── src/ # PHP source code (Symfony bundles)
│ ├── CoreBundle/ # Core platform logic
│ ├── CourseBundle/# Course-specific features
│ └── LtiBundle/ # LTI 1.3 integration
├── templates/ # Twig templates
├── var/ # Cache, logs, uploads (generated)
├── vendor/ # Composer dependencies (generated)
├── node_modules/ # npm dependencies (generated)
└── translations/ # Translation files源代码(src/)
CoreBundle
最大的 bundle。主要子目录如下:
Entity/
Doctrine 实体(User、Course、Session、ResourceNode 等)
Controller/
管理、API action 以及页面控制器(Api/ 子文件夹存放自定义 API Platform actions)
Settings/
设置模式文件(平台配置)
Repository/
Doctrine 仓储
AiProvider/
AI 提供商实现(OpenAI、Gemini、Mistral、DeepSeek、Grok)
Tool/
课程工具定义
Security/
Voters、authenticators、授权
EventListener/
事件监听器
EventSubscriber/
事件订阅器
Command/
Symfony 控制台命令
Migrations/
数据库迁移
Twig/
Twig 扩展
Storage/
Flysystem 存储适配器
CourseBundle
课程相关实体与逻辑:
Entity/
课程内容实体(CDocument、CQuiz、CLp、CForum、CStudentPublication 等)
Controller/
课程控制器
Settings/
课程级设置模式
Component/CourseCopy/
课程导入/导出(Common Cartridge、Moodle)
LtiBundle
LTI 1.3 集成:
Entity/
LTI 平台、工具与部署实体
Controller/
LTI 启动与配置端点
前端 (assets/vue/)
配置(config/)
Symfony 会自动将基础的 packages/*.yaml 文件与匹配环境子目录(dev/、prod/ 或 test/)中的文件合并,因此特定环境的文件只需覆盖有差异的值。
测试(tests/)
tests/ 不会包含在打包后的 Chamilo 下载包中(发行版 ZIP/tarball)——因其在运行时没有用途,且其中部分脚本若留在生产服务器上可能构成风险,故会被剥离。仅当通过 git clone 获取项目时才会存在。
CoreBundle/
镜像 src/CoreBundle/ 的 PHPUnit 测试:Api/、ApiResource/、Command/、Controller/、DataFixtures/、Entity/、Event/、EventListener/、Filter/、fixtures/、Helpers/、Mcp/、Migrations/、Repository/、Security/、Serializer/、Service/、Settings/、State/、Tool/、Traits/、Twig/
CourseBundle/
镜像 src/CourseBundle/ 的 PHPUnit 测试:Api/、Component/CourseCopy/、Repository/、Settings/
datafiller/
向测试安装填充演示内容的脚本:data_courses.php、data_users.php、fill_courses.php、fill_users.php、fill_many_users.php、fill_whoisonline.php、generate_users.php、fill_all.php(运行其余脚本),以及 images/ 和一个大型 CSV 用户导入示例
history/
记录 Chamilo 在过往发行版中结构的快照(1.8.8.2、1.9.0、1.10.0、1.11.0、2.0)
phpstan/
doctrine-orm-bootstrap.php,由 PHPStan 在分析 Doctrine ORM 代码时加载
playwright/
端到端浏览器测试:features/*.feature(通过 playwright-bdd 运行的 Gherkin 场景)、steps/common.steps.ts(TypeScript 步骤定义)、fixtures/(测试文件,例如电子表格)、scripts/check-results.mjs、playwright.config.ts,以及生成的 .features-gen/ 输出。用于替代旧的 Behat 套件,其场景仍保留在 git 历史中以供参考
procedures/
电子表格(目前为 spanish/),用作功能人工质量审查的检查清单基础
scripts/
面向现有 Chamilo 门户的一次性维护/修复/迁移脚本(大多针对较旧版本),以及 git-hooks/、img/、lang/ 和 packaging/ 子文件夹
关于如何配置测试数据库并运行 PHPUnit 与 Playwright 套件,请参见 测试。
构建配置
webpack.config.js
Webpack Encore 配置(入口、加载器、插件)
tailwind.config.js
Tailwind CSS 配置(内容路径、主题扩展、插件)
tsconfig.json
TypeScript 配置
eslint.config.mjs
ESLint 规则(扁平配置)
.prettierrc.json
Prettier 格式化规则
所有文件均位于项目根目录。PostCSS 插件(Tailwind + Autoprefixer)通过 enablePostCssLoader() 在 webpack.config.js 内联配置——没有独立的 postcss.config.js。webpack.config.js 通过 PostCSS 间接读取 tailwind.config.js,因此对 Tailwind 的 content 或 theme 部分的修改会在下一次运行 yarn encore dev / yarn encore production 时生效。
Webpack 入口点
构建会生成以下打包文件:
JavaScript:
vue— 主 Vue 3 应用(assets/vue/main.js)vue_installer— 安装向导(assets/vue/main_installer.js)legacy_app、legacy_exercise、legacy_lp、legacy_document— 尚未迁移到 Vue 的页面所用的遗留 JS
CSS:
app— 主样式表(assets/css/app.scss)以及专用样式表:
chat、document、editor、editor_content、markdown、print、responsive、scorm
CSS 结构(assets/css/)
Tailwind CSS
Tailwind 通过 PostCSS 集成。assets/css/_tailwind.scss 输出 base、component 和 utility 层;assets/css/app.scss 首先导入该文件,以便在所有其他 partial 中均可使用 Tailwind 工具类。Tailwind 配置——用于 purge 的内容路径、主题扩展以及插件——位于项目根目录的 tailwind.config.js(/var/www/chamilo/tailwind.config.js)。
使用 @layer 定义的自定义工具类和组件类(可见于 app.scss)遵循 Tailwind 的分层约定,使用户自定义类与生成的工具类遵循相同的特异性规则。
颜色主题
Chamilo 支持可直接在管理界面(管理 > 颜色主题)中配置的颜色主题系统。每个已保存的主题会将其文件写入 var/themes/ 下的专用目录:
colors.css 将 CSS 自定义属性定义为以空格分隔的 RGB 通道三元组,而非 rgb() 值,从而使 Tailwind 无需额外配置即可组合透明度变体(例如 bg-primary/50):
主题层位于已编译的 Tailwind/SCSS 包之上:浏览器在主样式表之后加载 colors.css,因此主题更改无需构建步骤即可立即生效。
最后更新于
这有帮助吗?