如何为php artisan创建pa快捷自定义Artisan命令?
解决方案
你的需求是创建pa作为php artisan的快捷命令,但当前handle方法的写法存在问题,Artisan::call()的参数应为具体命令名称而非php artisan。以下是修正后的完整实现:
1. 修正命令签名
让pa支持接收子命令和任意选项,修改$signature:
protected $signature = 'pa {command? : 要执行的Artisan命令} {--*=* : 传递所有Artisan选项}';
2. 完善handle方法
实现默认显示命令列表、支持子命令及选项传递的逻辑:
public function handle() { $command = $this->argument('command'); // 未指定子命令时,默认执行list命令(等同于直接运行php artisan) if (is_null($command)) { Artisan::call('list'); } else { $commandString = $command; // 遍历并追加用户传入的选项 foreach ($this->options() as $option => $value) { // 跳过框架默认选项,避免重复处理 if (in_array($option, ['help', 'quiet', 'verbose', 'version', 'ansi', 'no-ansi', 'no-interaction', 'env'])) { continue; } if ($value === true) { $commandString .= " --{$option}"; } elseif (!is_null($value)) { $commandString .= " --{$option}={$value}"; } } Artisan::call($commandString); } // 输出命令原生结果 $this->output->write(Artisan::output()); return Command::SUCCESS; }
3. 注册命令
确保命令已在app/Console/Kernel.php的$commands数组中注册:
protected $commands = [ \App\Console\Commands\PACommand::class, ];
使用示例
- 直接运行:
php artisan pa→ 等同于php artisan(显示命令列表) - 执行子命令:
php artisan pa migrate→ 等同于php artisan migrate - 带选项执行:
php artisan pa migrate --force→ 等同于php artisan migrate --force
内容的提问来源于stack exchange,提问作者saddysad
相关产品推荐
相关产品推荐

