-
Notifications
You must be signed in to change notification settings - Fork 48
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
group-command-list
查看子命令帮助
当使用 php examples/app home:test -h 时,可以查看到关于 HomeController::testCommand 更详细的信息
group-command-list
/** * @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 来查看效果