composer 是 yii 项目启动前提,require 仅限生产依赖,require-dev 仅限开发依赖;扩展需用 composer require 安装并显式配置 modules;自定义 autoload 不影响 yii 路由与 gii 生成。

Composer 在 Yii 项目里不是“可选工具”,而是启动、加载、扩展一切的前提——没它,vendor/autoload.php 就不会生成,Yii::createObject() 就找不到类,php yii migrate 直接报错。
composer.json 的 require 和 require-dev 别混用
生产环境只认 require 里的包:yiisoft/yii2、yiisoft/yii2-redis、ext-pdo_mysql 这些必须放这儿。一旦写进 require-dev,比如把 phpunit/phpunit 放错了位置,上线跑 composer install --no-dev 后整个测试套件就消失了,但更糟的是——如果某个组件(如 yii2-debug)被误塞进 require,它会在生产环境偷偷加载所有调试类,既拖慢响应,又可能暴露敏感路径。
-
require-dev里的包不会出现在vendor/autoload.php的 classmap 或 psr-4 映射中,除非你手动加--dev - CI/CD 流水线默认用
composer install --no-dev,此时require-dev内容根本不存在 - 检查依赖归属:运行
composer show --dev可列出所有开发依赖,composer show列出生产依赖
安装扩展别手改 composer.json,用 composer require
手动编辑 composer.json 再 composer update 看似可控,实则容易漏掉版本约束或触发意外升级。比如写 "yiisoft/yii2": "^2.0.0",composer update 可能拉下 2.1.0——而 Yii 2.1 引入了不兼容的 DI 容器行为,new yiiaseComponent() 就会直接失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确做法是:
composer require yiisoft/yii2-bootstrap4,它自动加约束"~2.0.0"(只允许补丁更新) - 要装开发专用扩展:
composer require --dev yiisoft/yii2-debug - 卸载用
composer remove yiisoft/yii2-swiftmailer,它会自动清理composer.json和vendor/
扩展装上了,为什么 Class 'xxx' not found?
常见现象:执行 composer require yiisoft/yii2-gii 成功,但访问 /index.php?r=gii 报 Class 'yiigiiModule' not found。这不是 Composer 没装好,而是 Yii 的自动加载和模块注册是两件事。
- Composer 只负责把类文件放进
vendor/并更新autoload.php;能否被 Yii 实例化,取决于是否在配置中声明了modules或components -
yii2-gii需在config/web.php中显式注册:'gii' => ['class' => 'yiigiiModule'],且通常加到'bootstrap'数组里 -
yii2-debug同理:必须在modules里配'debug' => ['class' => 'yiidebugModule'],否则即使类存在,也进不了调试面板
自定义命名空间 autoload 要避开 Yii 的路径约定
你想把模型放 app/models/ 下,于是加了:"psr-4": {"App\Models\": "app/models/"}。看起来能 new 出来,但 Gii 生成器找控制器时仍按 controllers/ 目录硬编码扫描,Module::getControllerPath() 也不读你的 psr-4 映射——它只认相对路径约定。
- 自定义 autoload 是给 PHP 类加载用的,不是给 Yii 的路由、模块发现、Gii 代码生成器用的
- 如果你改了模型路径,Gii 不会自动识别新位置;
php yii gii/model命令仍会往默认models/写 - 真要统一路径,建议保持 Yii 默认结构,再用符号链接或 IDE 设置 alias(如
@app/models)指向实际目录
最易忽略的一点:Composer 的 autoload 机制和 Yii 的模块注册机制完全解耦——装得再全,配得不对,照样报错;配得再准,autoload 漏映射,连类都 new 不出来。两者缺一不可,但各自管各自的活。










