-
Notifications
You must be signed in to change notification settings - Fork 49
v3 add group
Inhere edited this page May 28, 2022
·
1 revision
当一些命令相关性较大时,写在同一个文件里更方便阅读和管理。
通过继承 Inhere\Console\Controller
添加一组命令. 即是命令行的控制器,里面可以编写多个命令。
use Inhere\Console\Controller;
/**
* default command controller. there are some command usage examples
*/
class HomeController extends Controller
{
// 命令组名称
protected static $name = 'home';
// 命令组描述
protected static $description = 'default command controller. there are some command usage examples';
/**
* this is a command's description message, <cyan>color text</cyan>
* the second line text
* @usage {command} [arg ...] [--opt ...]
* @arguments
* arg1 argument description 1
* the second line
* a2,arg2 argument description 2
* the second line
* @options
* -s, --long option description 1
* --opt option description 2
* @example example text one
* the second line example
*/
public function testCommand()
{
$this->write('hello, welcome!! this is ' . __METHOD__);
}
/**
* a example for use color text output on command
*/
public function otherCommand()
{
$this->write('hello, welcome!! this is ' . __METHOD__);
}
}
查看命令组帮助: php examples/app home
查看子命令帮助
当使用 php examples/app home:test -h
时,可以查看到关于 HomeController::testCommand
更详细的信息
/**
* @return array|string[]
*/
public static function aliases(): array
{
return ['alias1', 'alias2'];
}
看到一些命令最后的 [alias: ...]
了吗,那是此命令拥有的别名.
即用别名也可以访问它,当一个命令太长时可以加别名以方便使用。并且一个命令可以拥有多个别名,注意不能添加相同别名。
命令上的注释是可被解析的
- 注释中的
@usage
@arguments
@options
@example
在使用帮助命令时,会被解析并显示出来 - 注释里面同样支持带颜色的文本输出
eg: this is a command's description <info>message</info>
- 上述注释tag里,支持变量替换(例如:
{command}
会自动替换为当前输入的命令) - 当你使用
php examples/app home -h
时,可以查看到HomeController
的所有命令描述注释信息
每个子命令的选项、参数也可以通过代码里来定义,不使用注解。
说明:子命令
defArg
的命令方法为defArgCommand
那它的配置方法就是{COMMAND}+Configure
即defArgConfigure
class HomeController extends Controller
{
protected static $name = 'home';
protected static $description = 'This is a demo command controller. there are some command usage examples(2)';
/**
* command `defArgCommand` config
* @throws LogicException
*/
protected function defArgConfigure(): void
{
$this->createDefinition()
->setDescription('the command arg/opt config use defined configure, it like symfony console: argument define by position')
->addArgument('name', Input::ARG_REQUIRED, "description for the argument 'name'")
->addOption('yes', 'y', Input::OPT_BOOLEAN, "description for the option 'yes'")
->addOption('opt1', null, Input::OPT_REQUIRED, "description for the option 'opt1'");
}
/**
* the command arg/opt config use defined configure, it like symfony console: argument define by position
*/
public function defArgCommand(): void
{
$this->output->dump($this->input->getArgs(), $this->input->getOpts(), $this->input->getBoolOpt('y'));
}
}
如上,就可以给命令组里每个子命令添加配置信息(描述、参数、选项等)
更多请查看 examples
目录中的示例代码和在目录下运行示例 php examples/app home
来查看效果
我的其他PHP项目
- inhere/kite 方便本地开发和使用的个人CLI工具应用
- php-toolkit/pflag PHP编写的,通用的命令行标志(选项和参数)解析库
- phppkg/easytpl 使用简单且快速的 PHP 模板引擎
- inhere/php-validate 一个简洁小巧且功能完善的php验证库
- inhere/sroute 轻量且快速的HTTP请求路由库