自定義命令
EasySwoole
默認自帶有 5 個命令,如下所示:
php easyswoole.php crontab 對定時任務進行管理
php easyswoole.php install 安裝(需要在./vendor/easyswoole/easyswoole/bin/easyswoole 文件中調用)
php easyswoole.php phpunit 執行單元測試
php easyswoole.php process 對自定義進程進行管理
php easyswoole.php server 啟動、停止、重啟服務等
php easyswoole.php task 查看 task 任務的運行狀態
默認命令詳細內容可查看 基礎管理命令
舊版本(3.4.x 之前版本)框架自定義命令的實現可查看 自定義命令 3.3.x
定義命令
通過實現 \EasySwoole\EasySwoole\Command\CommandInterface
接口,用戶可自定義命令:
該接口定義的方法如下:
<?php
namespace EasySwoole\Command\AbstractInterface;
interface CommandInterface
{
public function commandName(): string;
public function exec(): ?string;
public function help(CommandHelpInterface $commandHelp): CommandHelpInterface;
public function desc(): string;
}
自定義命令使用示例
實現自定義命令接口(AbstractInterface)
新建文件 App/Command/Test.php
,內容如下:
<?php
namespace App\Command;
use EasySwoole\Command\AbstractInterface\CommandHelpInterface;
use EasySwoole\Command\AbstractInterface\CommandInterface;
use EasySwoole\Command\CommandManager;
use EasySwoole\EasySwoole\Command\Utility;
class Test implements CommandInterface
{
// 設置命令名稱
public function commandName(): string
{
return 'test';
}
// 處理執行命令的邏輯
public function exec(): ?string
{
// 獲取用戶輸入的命令參數
$argv = CommandManager::getInstance()->getOriginArgv();
if (count($argv) < 3) {
echo "please input the action param!" . PHP_EOL;
return null;
}
// remove test
array_shift($argv);
// 獲取 action 參數
$action = $argv[1];
// 下面就是對 自定義命令 的一些處理邏輯
if (!$action) {
echo "please input the action param!" . PHP_EOL;
return null;
}
// 獲取 option 參數
$optionArr = $argv[2] ?? [];
switch ($action) {
case 'echo_string':
if ($optionArr) {
$strValue = explode('=', $optionArr);
echo $strValue[1] . PHP_EOL;
} else {
echo 'this is test!' . PHP_EOL;
}
break;
case 'echo_date':
if ($optionArr) {
$strValue = explode('=', $optionArr);
echo "now is " . date('Y-m-d H:i:s') . ' ' . $strValue[1] . '!' . PHP_EOL;
} else {
echo "now is " . date('Y-m-d H:i:s') . '!' . PHP_EOL;
}
break;
case 'echo_logo':
echo Utility::easySwooleLog();
break;
default:
echo "the action {$action} is not existed!" . PHP_EOL;
}
return null;
}
public function help(CommandHelpInterface $commandHelp): CommandHelpInterface
{
// 添加 自定義action(action 名稱及描述)
$commandHelp->addAction('echo_string', 'print the string');
$commandHelp->addAction('echo_date', 'print the date');
$commandHelp->addAction('echo_logo', 'print the logo');
// 添加 自定義action 可選參數
$commandHelp->addActionOpt('--str=str_value', 'the string to be printed ');
return $commandHelp;
}
// 設置自定義命令描述
public function desc(): string
{
return 'this is test command!';
}
}
注冊自定義命令
在 bootstrap 事件 中注冊自定義命令。
修改項目根目錄的 bootstrap.php
文件,添加如下內容實現注冊自定義命令:
<?php
//全局bootstrap事件
date_default_timezone_set('Asia/Shanghai');
# 【可選:調用 `initialize` 事件進行初始化】
// EasySwoole\EasySwoole\Core::getInstance()->initialize();
\EasySwoole\Command\CommandManager::getInstance()->addCommand(new \App\Command\Test());
注意:如果用戶需要獲取配置文件的配置,需要先執行 initialize
事件,調用 EasySwoole\EasySwoole\Core::getInstance()->initialize();
進行初始化。
bootstrap 事件
是 3.2.5
新增的事件,它允許用戶在框架初始化之前執行自定義事件。
執行命令結果
$ php easyswoole.php test
please input the action param!
$ php easyswoole.php test -h
This is test command!
Usage:
easyswoole test ACTION [--opts ...]
Actions:
echo_string print the string
echo_date print the date
echo_logo print the logo
Options:
--str=str_value the string to be printed
$ php easyswoole.php test echo_string
this is test!
$ php easyswoole.php test echo_date
now is 2021-02-23 19:23:19!
$ php easyswoole.php test echo_logo
______ _____ _
| ____| / ____| | |
| |__ __ _ ___ _ _ | (___ __ __ ___ ___ | | ___
| __| / _` | / __| | | | | \___ \ \ \ /\ / / / _ \ / _ \ | | / _ \
| |____ | (_| | \__ \ | |_| | ____) | \ V V / | (_) | | (_) | | | | __/
|______| \__,_| |___/ \__, | |_____/ \_/\_/ \___/ \___/ |_| \___|
__/ |
|___/
$ php easyswoole.php test echo_string --str="hello easyswoole"
hello easyswoole