tp5.0 thinkphp5 自定义命令行详解
原创
©著作权归作者所有:来自51CTO博客作者西瓜霜啊的原创作品,请联系作者获取转载授权,否则将追究法律责任
先简单的定义一个命令,建立一个命令行测试类:
<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中配置一下才行哦:
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
试试看吧
破罐子互摔