post-autoload-dump钩子必须写在composer.json的"scripts"段中,格式为"post-autoload-dump": "myclass::onautoloaddump",支持静态方法、命令或闭包(仅cli),默认不传参数,需通过event对象获取上下文,且仅根项目配置生效。

post-autoload-dump钩子在哪写?不是在scripts里随便放
这个钩子必须写在composer.json的"scripts"段里,但**不能只写名字**——它需要明确绑定到post-autoload-dump这个事件名。很多人误以为只要函数名含“dump”就能触发,其实Composer只认固定事件名。
- 正确位置:
"scripts": { "post-autoload-dump": "MyClass::onAutoloadDump" } - 错误写法:
"my-post-dump": "..."(不会被自动调用) - 支持三种调用形式:静态方法
Class::method、可执行命令php foo.php、闭包(仅CLI模式下有效,且需在autoload-dev中声明)
钩子函数参数怎么传?默认不带任何参数
Composer调用post-autoload-dump时,**默认不传入任何参数**,哪怕你写成"MyClass::handler $event"也没用——变量插值在scripts里不生效。想拿到事件上下文,得靠静态方法自己从全局获取。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 静态方法内可通过
$event->getComposer()和$event->getEventName()访问对象(前提是方法签名接收Event参数) - 命令行方式无法直接访问
Event对象,只能通过环境变量或临时文件间接通信 - 常见误操作:在脚本里直接
var_dump($argv)期待看到事件信息——实际为空
为什么autoload重生成后钩子没运行?检查这三处
钩子不触发,90%是因为配置或执行路径不对,而不是代码逻辑问题。
-
composer dump-autoload会触发;但composer install或composer update是否触发,取决于是否真的重建了autoload文件(比如无变更时会跳过) - 如果项目用了
"optimize-autoloader": true,且类映射已缓存,dump-autoload可能不产生实质变化,钩子仍会调用,但时机易被误判 - 钩子定义在
require-dev依赖的包里?不行——只有根项目的composer.json中的scripts才被识别
能用它干啥?别碰文件生成,小心循环 autoload
这个钩子适合做轻量级响应,比如刷新缓存、校验命名空间一致性、触发CI预检。但**千万别在钩子里修改vendor/autoload.php或重新require自身类**——会导致autoload逻辑错乱甚至无限递归。
- 安全操作:写日志、调用
file_put_contents生成非autoload相关文件(如generated/version.php) - 危险操作:
include 'vendor/autoload.php'、require_once __DIR__.'/../vendor/autoload.php' - 性能提示:钩子在每次autoload重建时同步执行,若耗时超过100ms,会拖慢
composer install整体速度
autoload-dev,就会静默失败——连错误都不报。










