You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:12:51