tp5.0 thinkphp5 自定义命令行详解
感谢https://blog.csdn.net/kelinfeng16/article/details/88549717
先简单的定义一个命令,建立一个命令行测试类:
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中配置一下才行哦:
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
试试看吧