时间: 2025年07月03日 20:58
任务: 为Test模块实现命令自动发现机制
状态: ✅ 已完成
用户询问Laravel中 app/Console/Commands/* 的命令是否能自动发现,以及 app/Module/Test/Commands/* 的命令是否也能自动发现。
app/Console/Commands/* ✅ 可以自动发现
app/Console/Kernel.php 中的 $this->load(__DIR__.'/Commands') 实现app/Module/*/Commands/* ❌ 不能自动发现
为Test模块实现了类似Laravel Kernel的自动发现机制:
// app/Module/Test/Providers/TestServiceProvider.php
protected function registerCommands(): void
{
if ($this->app->runningInConsole()) {
// 自动发现并注册Test模块Commands目录下的所有命令
$this->loadCommandsFrom(__DIR__ . '/../Commands');
}
}
protected function loadCommandsFrom(string $path): void
{
// 扫描目录下所有PHP文件
// 推导类名并验证是否为有效Command类
// 自动注册到Laravel命令系统
}
TestModuleCommandDiscoveryCommand.php - 测试命令发现机制TestAutoDiscoveryCommand.php - 验证自动发现功能(未手动注册)✅ Test模块中的4个命令全部被自动发现:
test - TestCommands.phptest:auto-discovery - TestAutoDiscoveryCommand.php (新创建,未手动注册)test:module-command-discovery - TestModuleCommandDiscoveryCommand.phptest:urs-referral-sync - TestUrsReferralSyncCommand.phpgit commit -m "为Test模块实现命令自动发现机制
- 修改TestServiceProvider,添加loadCommandsFrom()自动发现方法
- 创建TestModuleCommandDiscoveryCommand测试命令发现机制
- 创建TestAutoDiscoveryCommand验证自动发现功能
- Test模块现在支持像app/Console/Commands/*一样的自动命令发现
- 新增命令无需手动在ServiceProvider中注册"
成功为Test模块实现了命令自动发现机制,现在Test模块具备了与 app/Console/Commands/* 相同的自动发现能力。其他模块保持原有的手动注册机制不变。