Hyperf 命令行

创建命令

php bin/hyperf.php gen:command FooCommand

可以看到在App/Command目录下生成文件 FooCommand.php 文件

parent::__construct('demo:command')
设置当前命令,在命令行运行改命令的指令为:
php bin/hyperf.php gen:command demo:command

configure方法永不对命令做基础的设置,如参数的设置,命令的描述等
handle 方法 具体的业务处理逻辑
<?php

declare(strict_types=1);

namespace App\Command;

use Hyperf\Command\Command as HyperfCommand;
use Hyperf\Command\Annotation\Command;
use Psr\Container\ContainerInterface;

/**
 * @Command
 */
class FooCommand extends HyperfCommand
{
    /**
     * @var ContainerInterface
     */
    protected $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;

        parent::__construct('demo:command');
    }

    public function configure()
    {
        parent::configure();
        $this->setDescription('Hyperf Demo Command');
    }

    public function handle()
    {
        $this->line('Hello Hyperf!', 'info');
    }
}

 

 

输入常用方法

1、利用addArgument和getArgument 设置和获取参数

public function __construct(ContainerInterface $container)
    {
        $this->container = $container;

        parent::__construct('foo:test');
    }

    public function configure()
    {
        parent::configure();
        $this->setDescription('Hyperf Demo Command');
        /**
         * 添加一个参数
         * @param string               $name        参数名
         * @param int|null             $mode        参数模式: InputArgument::REQUIRED 必填 or InputArgument::OPTIONAL 可选
         * @param string               $description 描述
         * @param string|string[]|null $default     默认值 (仅在可选模式下)
         */
        $this->addArgument('name',InputArgument::OPTIONAL,'名字','Hyperf');
        $this->addArgument('name2',InputArgument::OPTIONAL,'名字2','Hyperf2');
    }

    public function handle()
    {
        /**
         * 获取参数
         */
        $name = $this->input->getArgument("name");
        $name2 = $this->input->getArgument("name2");
        $this->line(sprintf('Hello %s %s!',$name,$name2), 'info');
    }

执行命令

 php bin/hyperf.php foo:test World1 World2

得到结果

Hello World1 World2!

 

2、利用addOption和getOption 设置和获取参数

public function configure()
    {
        parent::configure();
        $this->setDescription('Hyperf Demo Command');
        /**
         * @param string                        $name        The option name
         * @param string|array|null             $shortcut    The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts
         * @param int|null                      $mode        The option mode: One of the InputOption::VALUE_* constants
         * @param string                        $description A description text
         * @param string|string[]|int|bool|null $default     The default value (must be null for InputOption::VALUE_NONE)
         */
        $this->addOption('name','n1',InputOption::VALUE_OPTIONAL,'名字','Hyperf');
        //InputOption::VALUE_IS_ARRAY必须指定其模式是必选 InputOption::VALUE_REQUIRED 还是可选 InputOption::VALUE_OPTIONAL
        $this->addOption('name2','n2',InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL,'名字2',["波波","bobo"]);
    }

    public function handle()
    {
        /**
         * 获取参数
         */
        $name = $this->input->getOption("name");
        $name2 = $this->input->getOption("name2");
        $this->line(sprintf('Hello %s %s!',$name,implode(",",$name2)), 'info');
    }

执行命令

php bin/hyperf.php foo:test --name World1 --name2 World2 --name2 World3
# 或者
 php bin/hyperf.php foo:test --name=World1 --name2=World2 --name2=World3

结果

Hello World1 World2,World3!

如果参数中有空格可以使用 ""

 php bin/hyperf.php foo:test --name "Worl  d1" --name2 World2 --name2 World3

结果

Hello Worl  d1 World2,World3!

 

 

输出常用方法

public function configure()
    {
        parent::configure();
        $this->setDescription('Hyperf Demo Command');
    }

    public function handle()
    {
        //换行输出
        $this->output->writeln("Hello World");
        //错误
        $this->output->writeln("<error>Hello</error> World");
        //输入
        $vaule = $this->ask("请输入信息:","Hyperf");
        $this->output->writeln($vaule);
        //选择
        $vaule = $this->output->choice("请选择颜色:",["黄色","绿色"]);
        $this->output->writeln($vaule);
        //确认
        $vaule = $this->output->confirm("确认要继续吗",false);
        $this->output->writeln((int)$vaule);
        //进度条
        $this->output->progressStart(100);
        for ($i=1;$i<=10;$i++){
            $this->output->progressAdvance(10);
            sleep(1);
        }
        $this->output->writeln("Finish");
    }

执行命令

 php bin/hyperf.php foo:test

得到结果

 

其他

//是否在协程下执行
    public $coroutine=true;

 

 

 

posted @ 2020-06-16 11:00  波波波波波波  阅读(1896)  评论(0编辑  收藏  举报