如何在routes.php中调用handle方法修复Artisan命令注册报错
错误原因
Artisan::command() 方法用于快速注册闭包类型的Artisan命令,要求第二个参数必须传入闭包实例,你传入了数组格式的配置,不符合参数要求,因此触发类型错误。
且你已经创建了完整的命令类,类内部已通过$signature属性绑定了make:greetings命令标识,不需要在routes.php中重复注册。
修复方案
方案一(推荐,符合命令类开发规范)
- 直接删除routes.php中的错误代码:
Artisan::command('make:greetings',[Hello::class,'handle'=>true]); - 注册命令类:
- Laravel 8及以上版本默认开启了
app/Console/Commands目录下命令的自动加载,删除错误代码后即可直接使用命令 - 低版本Laravel或者自定义框架配置场景,打开
app/Console/Kernel.php,在$commands属性中添加你的命令类即可:
protected $commands = [ \App\Console\Commands\Hello::class, ]; - Laravel 8及以上版本默认开启了
- 运行命令
php artisan make:greetings,即可在日志文件中看到写入的welcome message记录。
方案二(闭包命令实现,无需单独创建命令类)
如果不需要独立的命令类文件,可以直接用闭包方式注册命令,将routes.php中的代码替换为:
Artisan::command('make:greetings', function () { \Log::info("welcome message"); $this->info("日志写入完成"); });
修改完成后直接运行命令即可生效。
优化建议
现有Hello类的handle方法返回了Log::info()的执行结果,不符合命令类返回整数状态码的规范,建议调整为:
public function handle() { Log::info("welcome message"); $this->info("问候日志已写入成功"); // 命令行输出执行提示 return 0; // 0代表命令执行成功,非0代表执行失败 }
内容的提问来源于stack exchange,提问作者Devops Training
相关产品推荐
相关产品推荐

