• tp5.0 thinkphp5 自定义命令行详解


    感谢https://blog.csdn.net/kelinfeng16/article/details/88549717

    先简单的定义一个命令,建立一个命令行测试类:

    <php?
    namespace app\base\command;
    use think\console\Command; use think\console\Input; use think\console\Output; class Test extends Command { protected function configure() { $this->setName('test');//定义命令的名字 } protected function execute(Input $input, Output $output) { $output->writeln('Hello World');//在命令行界面输出内容 } }

    现在来说一下这2个方法的功能:

    configure()
       用来设置自定义命令属性,可以配置命令名字、命令参数、命令选项、命令描述

     execute()
       用来设置执行命令的相关操作,通过Input,Output输入输出达到命令行和代码的交互。

    配置命令

     设置完了自定义命令,还要在application/command.php中配置一下才行哦:

    <php?
    return [
            'app\base\command\Test'
        ];

    一个命令对应一个命令类,对应一个配置。也就是说想定义多个命令,就需要建立多个类文件,每个定义的命令都要在这里配置才能生效。

    到网站根目录,执行

    php think

    能查看所有可用的命令

    执行

    php think test

    就会输出

    Hello World

    --------------------------------------------

    命令参数

     上面的命令似乎只能执行一些简单的操作,这次我们给命令添加几个参数,增加命令的功能性。

    <?php
        protected function configure()
        {
            $this->setName('test')                      //定义命令的名字
            ->setDescription('This is my command')     //定义命令的描述
            ->addArgument('name')                      //增加一个名字参数
            ->addArgument('age');                      //增加一个年龄参数
        }
    
        protected function execute(Input $input, Output $output)
        {
            //获取输入的参数
            $name = $input->getArgument('name');
            $age = $input->getArgument('age');
    
            //输出获得的参数
            $output->writeln("My name is $name ,age is $age");
        }

    执行命令

    php think test wuhen 20

    获得

    My name is wuhen,age is 20 的输出

    ---------------------------------------------------------------

    命令选项
     我们的命令虽然可以传入参数了,不过可以增加 选项 进一步充分我们命令的功能。

    <?php
        protected function configure()
        {
            $this->setName('calculate')                      //定义命令的名字
                ->setDescription('This is my command')      //定义命令的描述
                ->addArgument('number1')                    //参数1
                ->addArgument('number2')                    //参数2
                ->addOption('add')                          //定义相加的选项
                ->addOption('sub');                         //定义相减的选项
        }
    
        protected function execute(Input $input, Output $output)
        {
            //获取输入的2个参数
            $number1 = $input->getArgument('number1');
            $number2 = $input->getArgument('number2');
            
            //加法操作
            if($input->hasOption('add')){
                $result = $number1 + $number2;
                $output->writeln("$number1 + $number2 = $result");
            }
            
            //减法操作
            if($input->hasOption('sub')){
                $result = $number1 - $number2;
                $output->writeln("$number1 - $number2 = $result");
            }
        }

    在命令行输入:

    php think calculate 20 30 --add

    可以看到返回 :

    20 + 30 = 50

    在命令行输入:

    php think calculate 20 30 --sub

    可以看到返回:

    20 - 30 = -10

    选项也是可以设置默认值和执行命令时添加值的,例如

    <?php
    protected function configure()
        {
            $this->setName('test')
                ->addOption(
                    "port",
                    null,
                    Option::VALUE_REQUIRED,
                    '',
                    9501
                )
                ->setDescription('test is a test function ');
        }
    
        protected function execute(Input $input, Output $output)
        {
            $port = $input->getOption('port');
            $output->writeln("TestCommand:".$port);
        }

    执行命令

    php think test --port

    或者执行命令

    php think test --port=555

    试试看吧

  • 相关阅读:
    ajax配置项中的type与method
    解决 eclipse出现 Address already in use: bind,以及tomcat端口占用
    网络流定理总结
    题解说明
    sol
    题解P4201: [NOI2008]设计路线
    题解 Luogu P5434: 有标号荒漠计数
    题解 Luogu P2499: [SDOI2012]象棋
    JZOJ-2019-11-8 A组
    JZOJ-2019-11-7 A组
  • 原文地址:https://www.cnblogs.com/zonglonglong/p/16033747.html
Copyright © 2020-2023  润新知