Sphinx 无法直接解析 CodeIgniter 代码,因其仅原生支持 Python docstring 和对象,不识别 PHP 语法、CI 的 MVC 结构、动态加载机制及路由配置;推荐使用 phpDocumentor、Markdown+mkdocs 或 Swagger 生成实用文档。

CodeIgniter 本身不内置 Sphinx 集成,也不存在官方或广泛认可的叫 “Sphinx_CodeIgniter 文档生成工具” 的标准工具——你大概率是混淆了两个独立生态:Sphinx(Python 的文档生成器)和 CodeIgniter(PHP 框架)。直接在 CI 项目里跑 sphinx-build 不会自动解析 $this->load->model() 或路由注释,更不会生成可导航的 API 文档。
为什么 Sphinx 不能直接解析 CodeIgniter 代码
Sphinx 默认只识别 Python 源码中的 docstring 和 autodoc 扩展支持的 Python 对象。它对 PHP 无原生解析能力,也不会理解 CI 的 MVC 结构、CI_Controller 继承链、或 config/autoload.php 中的加载逻辑。
- 尝试用
sphinx-apidoc -l -o docs/ application/会报错或生成空/乱码内容 - 即使搭配
sphinxcontrib-phpdomain,也只能解析基础 PHPDoc(如/** @var string */),无法还原 CI 的动态加载行为(如$this->session实际来自CI_Session类) - 路由定义在
routes.php里,不是 PHPDoc 注释,Sphinx 无法提取 URL 映射关系
真正可行的 CodeIgniter 文档方案
给 CI 项目生成实用文档,应优先选 PHP 原生生态工具,而非强行嫁接 Sphinx:
-
phpDocumentor:主流选择,支持 CI 的 PHPDoc 标准写法(如@property CI_DB_query_builder $db),能生成带类继承图、方法索引的 HTML 文档 - 手写 Markdown +
mkdocs:适合写用户手册、部署说明、API 接口约定;用mkdocs.yml配置导航,比 Sphinx 轻量且无需 Python 环境 - Swagger/OpenAPI:如果 CI 提供 REST 接口,在控制器方法里加
@OA\Get注释,用zircote/swagger-php生成 JSON,再用redoc-cli渲染
如果你坚持用 Sphinx(极少数场景)
仅建议用于「技术白皮书」类文档(非代码 API 文档),例如描述 CI 项目的架构设计、模块职责、数据库变更日志等。此时:
- 把 Sphinx 当作纯文本渲染器,所有内容手动写在
.rst文件里,不依赖自动解析 - 用
.. include:: ../application/config/database.php嵌入关键配置片段(需开启sphinx.ext.include) - 避免在
conf.py里配置extensions = ['sphinxcontrib.phpdomain']后又期望它识别$this->input->post()—— 这不会工作
最常被忽略的一点:CI 项目的文档价值不在“函数列表”,而在“哪里改配置”“如何扩展核心类”“钩子执行顺序”。这些必须靠人工梳理,任何自动化工具都只是辅助。别花三天调 sphinxcontrib-phpdomain 的 autodoc 参数,不如花两小时写清楚 hooks.php 的触发时机表。


















