自定义命令

EasySwoole 默认自带有 5 个命令,如下所示:

  1. php easyswoole crontab 对定时任务进行管理
  2. php easyswoole install 安装(需要在./vendor/easyswoole/easyswoole/bin/easyswoole 文件中调用)
  3. php easyswoole phpunit 执行单元测试
  4. php easyswoole process 对自定义进程进行管理
  5. php easyswoole server 启动、停止、重启服务等
  6. php easyswoole task 查看 task 任务的运行状态

默认命令详细内容可查看 基础管理命令

旧版本(3.4.x 之前版本)框架自定义命令的实现可查看 自定义命令 3.3.x

定义命令

通过实现 \EasySwoole\EasySwoole\Command\CommandInterface 接口,用户可自定义命令:

该接口定义的方法如下:

  1. <?php
  2. namespace EasySwoole\Command\AbstractInterface;
  3. interface CommandInterface
  4. {
  5. public function commandName(): string;
  6. public function exec(): ?string;
  7. public function help(CommandHelpInterface $commandHelp): CommandHelpInterface;
  8. public function desc(): string;
  9. }

自定义命令使用示例

实现自定义命令接口(AbstractInterface)

新建文件 App/Command/Test.php,内容如下:

  1. <?php
  2. namespace App\Command;
  3. use EasySwoole\Command\AbstractInterface\CommandHelpInterface;
  4. use EasySwoole\Command\AbstractInterface\CommandInterface;
  5. use EasySwoole\Command\CommandManager;
  6. use EasySwoole\EasySwoole\Command\Utility;
  7. class Test implements CommandInterface
  8. {
  9. public function commandName(): string
  10. {
  11. return 'test';
  12. }
  13. public function exec(): ?string
  14. {
  15. // 获取用户输入的命令参数
  16. $argv = CommandManager::getInstance()->getOriginArgv();
  17. if (count($argv) < 3) {
  18. echo "please input the action param!" . PHP_EOL;
  19. return null;
  20. }
  21. // remove test
  22. array_shift($argv);
  23. // 获取 action 参数
  24. $action = $argv[1];
  25. // 下面就是对 自定义命令 的一些处理逻辑
  26. if (!$action) {
  27. echo "please input the action param!" . PHP_EOL;
  28. return null;
  29. }
  30. // 获取 option 参数
  31. $optionArr = $argv[2] ?? [];
  32. switch ($action) {
  33. case 'echo_string':
  34. if ($optionArr) {
  35. $strValue = explode('=', $optionArr);
  36. echo $strValue[1] . PHP_EOL;
  37. } else {
  38. echo 'this is test!' . PHP_EOL;
  39. }
  40. break;
  41. case 'echo_date':
  42. if ($optionArr) {
  43. $strValue = explode('=', $optionArr);
  44. echo "now is " . date('Y-m-d H:i:s') . ' ' . $strValue[1] . '!' . PHP_EOL;
  45. } else {
  46. echo "now is " . date('Y-m-d H:i:s') . '!' . PHP_EOL;
  47. }
  48. break;
  49. case 'echo_logo':
  50. echo Utility::easySwooleLog();
  51. break;
  52. default:
  53. echo "the action {$action} is not existed!" . PHP_EOL;
  54. }
  55. return null;
  56. }
  57. public function help(CommandHelpInterface $commandHelp): CommandHelpInterface
  58. {
  59. // 添加 自定义action(action 名称及描述)
  60. $commandHelp->addAction('echo_string', 'print the string');
  61. $commandHelp->addAction('echo_date', 'print the date');
  62. $commandHelp->addAction('echo_logo', 'print the logo');
  63. // 添加 自定义action 可选参数
  64. $commandHelp->addActionOpt('--str=str_value', 'the string to be printed ');
  65. return $commandHelp;
  66. }
  67. // 设置自定义命令描述
  68. public function desc(): string
  69. {
  70. return 'this is test command!';
  71. }
  72. }

注册自定义命令

bootstrap 事件 中注册自定义命令。

修改项目根目录的 bootstrap.php 文件,添加如下内容实现注册自定义命令:

  1. <?php
  2. //全局bootstrap事件
  3. date_default_timezone_set('Asia/Shanghai');
  4. \EasySwoole\Command\CommandManager::getInstance()->addCommand(new \App\Command\Test());

bootstrap 事件3.2.5 新增的事件,它允许用户在框架初始化之前执行自定义事件。

执行命令结果

  1. $ php easyswoole test
  2. please input the action param!
  3. $ php easyswoole test -h
  4. This is test command!
  5. Usage:
  6. easyswoole test ACTION [--opts ...]
  7. Actions:
  8. echo_string print the string
  9. echo_date print the date
  10. echo_logo print the logo
  11. Options:
  12. --str=str_value the string to be printed
  13. $ php easyswoole test echo_string
  14. this is test!
  15. $ php easyswoole test echo_date
  16. now is 2021-02-23 19:23:19!
  17. $ php easyswoole test echo_logo
  18. ______ _____ _
  19. | ____| / ____| | |
  20. | |__ __ _ ___ _ _ | (___ __ __ ___ ___ | | ___
  21. | __| / _` | / __| | | | | \___ \ \ \ /\ / / / _ \ / _ \ | | / _ \
  22. | |____ | (_| | \__ \ | |_| | ____) | \ V V / | (_) | | (_) | | | | __/
  23. |______| \__,_| |___/ \__, | |_____/ \_/\_/ \___/ \___/ |_| \___|
  24. __/ |
  25. |___/
  26. $ php easyswoole test echo_string --str="hello easyswoole"
  27. hello easyswoole